2013-03-13 86 views
3

我正在努力讓我的頭腦圍繞着這個基本的Prolog概念。使用列表的Prolog祖先條款

據我瞭解,確定一個人的祖先的基本條款如下:

ancestor(X, Y) :- parent(X, Y). 
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). 

不過,我試圖讓我的頭圍繞如何這個工程的實現列表來確定Prolog程序父母,即孩子:

parent_of(simon, [matthew, andrea, joanne]). 

要確定用是否有人某人的父親,我用這它完美的作品:

father_of(X, Y) :- parent_of(X, List), my_member(Y, List), male(X). 

但是,我似乎無法弄清楚如何得到這個爲上面的祖先條款工作。

回答

4

成員/ 2這是一個元素和列表之間的簡單關係:

ancestor_of(X, Y) :- parent_of(X, Ys), member(Y, Ys). 
ancestor_of(X, Y) :- parent_of(X, Zs), member(Z, Zs), ancestor_of(Z, Y). 

我添加了一個關係到測試的傳遞規則

parent_of(simon, [matthew, andrea, joanne]). 
parent_of(andrea, [bill, joan]). 

產量

?- ancestor_of(andrea,A). 
A = bill ; 
A = joan ; 
false. 

?- ancestor_of(simon,A). 
A = matthew ; 
A = andrea ; 
A = joanne ; 
A = bill ; 
A = joan ; 
false. 

?- ancestor_of(X,bill). 
X = andrea ; 
X = simon ; 
false. 
+0

非常好,非常感謝你的幫助。 – 2013-03-13 15:34:37