我正在编写一个程序,如果一个人被移除后是另一个人的第二个表亲,则返回true。唯一知道的信息是谁是谁的父母。我正在使用这里的家谱http://en.wikipedia.org/wiki/Cousin#Second_cousins_once_removed。总的来说,我把一切都搞定了但是我不能让它找到第二个堂兄一旦被删除。第一个堂兄和曾经被删除的堂兄工作,只是希望得到一些帮助,如何找到一个也被移除的第二个堂兄。
parent(adam, betty).
parent(agatha, betty).
parent(adam, charles).
parent(agatha, charles).
parent(bill, david).
parent(betty, david).
parent(charles, emma).
parent(corinda, emma).
parent(dawn, frank).
parent(david, frank).
parent(emma, gwen).
parent(eric, gwen).
parent(frank, harry).
parent(felicity, harry).
child(X, Y) :-
parent(Y, X).
grandparent(X, Y) :-
parent(X, Z),
parent(Z, Y).
greatgrandparent(X, Y) :-
parent(P, Y),
grandparent(X, P).
cousin(X, Y) :-
grandparent(Z, X),
grandparent(Z, Y),
\+sibling(X, Y),
X \= Y.
sibling(X, Y) :-
parent(Z, X),
parent(Z, Y),
X \= Y.
cousinonceremoved(X, Y) :-
cousin(Z, Y),
child(X, Z).
secondcousin(X, Y) :-
greatgrandparent(Z, X),
greatgrandparent(Z, Y),
\+sibling(X, Y),
\+cousin(X, Y),
X \= Y.
答案 0 :(得分:2)
正如文章中所述:“一个人的第二个堂兄的孩子”。
secondCousinOnceRemoved(H, G) :- child(H, F), secondcousin(F, G).