我正在努力探索这个基本的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).
但是,我似乎无法弄清楚如何让它适用于上面的祖先条款。
答案 0 :(得分:4)
member / 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.