2011-05-28 39 views
0

我有这样的代码找到相同的对象存在多少

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

我想打一个规则,算上X颜色多少次存在。 对于这种情况count_color(X)应该返回2.

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

+4

你的意思是调用'count_color(蓝色,X)'后,'X'应该是2? – svick 2011-05-28 19:01:18

+0

这个问题涵盖了与[此前一个]相同的理由(http://stackoverflow.com/questions/6060268/prolog-count-the-number-of-times-a-predicate-is-true),它提供了一个除了两者之外,这里还没有描述解决方法的方法(assert/retract)。 – hardmath 2011-05-31 01:25:33

回答

1

它是通过使用aggregate/3谓词可能:

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

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

1

aggregate/3并不在ISO序言存在,所以它不是在所有实现可用。但是你可以使用findall/3相同的结果,如:

count_color(Color, N) :- findall(_, color(Color), List), length(List, N). 
相关问题