2013-10-27 77 views
3

有這些事實:如何在Prolog中創建事實列表?

man(john). 
man(carl). 
woman(mary). 
woman(rose). 

我需要創建謂詞人(列表),它會返回每一個男人和女人基於以前的事實的名稱列表。這正是我所需要的輸出:

?- people(X). 
X = [john, carl, mary, rose] 

這裏是我寫的代碼,但它不工作:

people(X) :- man(X) ; woman(X). 
people(X|Tail) :- (man(X) ; woman(X)) , people(Tail). 

可能有人請幫忙嗎?

回答

14

使用findall/3

people(L) :- findall(X, (man(X) ; woman(X)), L). 
?- people(X). 
X = [john, carl, mary, rose]. 
+0

它的工作!非常感謝你!我會閱讀有關findall函數的內容。 – renatov