2011-05-28 21 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). 
相關問題