prolog中的代码可以找到两个同辈的人?

问题描述 投票:0回答:2

我需要序言中的代码。

假设我们在家谱中定义了一些人。

如果两个人具有同一代并且谁是同一祖先,我如何编写一个函数来获取两个人的姓名和进程?

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
prolog family-tree
2个回答
0
投票

分解:从具有共同祖先的两个人的谓词开始,其中具有相同的父母将是您的基本情况。然后增强它以跟踪或每个人从共同祖先有多少代。再完成一步(作为练习),你就完成了!


0
投票

参见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)。

© www.soinside.com 2019 - 2024. All rights reserved.