找出存在多少相同的对象

时间:2011-05-28 18:36:11

标签: prolog

我有这段代码

color(blue).
color(red).
color(blue).
color(green).

我想制定一个规则来计算X颜色存在的次数。 对于这种情况,count_color(X)应返回2.

这是可能的,或者我必须用颜色制作一个列表吗?

2 个答案:

答案 0 :(得分:1)

可以使用aggregate/3谓词:

count_color(Color, N) :- aggregate(count, color(Color), N).

使用aggregate/3的指针:aggregate/3 in swi-prolog

答案 1 :(得分:1)

ISO prolog中不存在

aggregate/3,因此并非在所有实现中都可用。但是您可以使用findall/3获得相同的结果,如:

count_color(Color, N) :- findall(_, color(Color), List), length(List, N).