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