0
我有这样的代码找到相同的对象存在多少
color(blue).
color(red).
color(blue).
color(green).
我想打一个规则,算上X颜色多少次存在。 对于这种情况count_color(X)应该返回2.
这是可能的,或者我必须用颜色做一个列表?
我有这样的代码找到相同的对象存在多少
color(blue).
color(red).
color(blue).
color(green).
我想打一个规则,算上X颜色多少次存在。 对于这种情况count_color(X)应该返回2.
这是可能的,或者我必须用颜色做一个列表?
它是通过使用aggregate/3
谓词可能:
count_color(Color, N) :- aggregate(count, color(Color), N).
一种使用aggregate/3
指针:aggregate/3 in swi-prolog
aggregate/3
并不在ISO序言存在,所以它不是在所有实现可用。但是你可以使用findall/3
相同的结果,如:
count_color(Color, N) :- findall(_, color(Color), List), length(List, N).
你的意思是调用'count_color(蓝色,X)'后,'X'应该是2? – svick 2011-05-28 19:01:18
这个问题涵盖了与[此前一个]相同的理由(http://stackoverflow.com/questions/6060268/prolog-count-the-number-of-times-a-predicate-is-true),它提供了一个除了两者之外,这里还没有描述解决方法的方法(assert/retract)。 – hardmath 2011-05-31 01:25:33