我需要序言中的代码。
假设我们在家谱中定义了一些人。
如果两个人具有同一代并且谁是同一祖先,我如何编写一个函数来获取两个人的姓名和进程?
parent(chester,irvin).
parent(chester,clarence).
parent(chester,mildred).
parent(irvin,ron).
parent(irvin,ken).
parent(clarence,shirley).
parent(clarence,sharon).
parent(clarence,charlie).
parent(mildred,mary).
male(chester).
female(mildred).
male(irvin).
female(shirley).
male(clarence).
female(sharon).
male(ron).
female(mary).
male(ken).
male(charlie).
father(X,Y) :- parent(X,Y), male(X).
mother(X,Y) :- parent(X,Y), female(X).
grandparent(X,Y) :- parent(X,Z), parent(Z,Y).
paternalgrandfather(X,Y) :- father(X,Z), father(Z,Y).
sibling(X,Y) :- parent(Z,X), parent(Z,Y).
brothers(X,Y) :- sibling(X,Y),male(X),male(Y), \+ (X=Y).
samegeneration(x,y) :- HERE I DONT KNOW WHAT TO DO
分解:从具有共同祖先的两个人的谓词开始,其中具有相同的父母将是您的基本情况。然后增强它以跟踪或每个人从共同祖先有多少代。再完成一步(作为练习),你就完成了!
参见https://oa.upm.es/11160/1/HERME_A_2001-5.pdf
例如,考虑以下用于查找“同一代的表兄弟”的程序,取自 Ullman [1988],
sg(X, X) : - 人(X)。
sg(X, Y) : - 父级(X, Xp), 父级(Y, Yp), sg(Xp, Yp)。