我有这段代码
color(blue).
color(red).
color(blue).
color(green).
我想制定一个规则来计算X颜色存在的次数。 对于这种情况,count_color(X)应返回2.
这是可能的,或者我必须用颜色制作一个列表吗?
答案 0 :(得分:1)
可以使用aggregate/3
谓词:
count_color(Color, N) :- aggregate(count, color(Color), N).
使用aggregate/3
的指针:aggregate/3 in swi-prolog
答案 1 :(得分:1)
aggregate/3
,因此并非在所有实现中都可用。但是您可以使用findall/3
获得相同的结果,如:
count_color(Color, N) :- findall(_, color(Color), List), length(List, N).