如何找到某人是某人是第二个堂兄曾经被删除过的prolog?

时间:2015-05-16 11:04:12

标签: prolog

我正在编写一个程序,如果一个人被移除后是另一个人的第二个表亲,则返回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.

1 个答案:

答案 0 :(得分:2)

正如文章中所述:“一个人的第二个堂兄的孩子”。

secondCousinOnceRemoved(H, G) :- child(H, F), secondcousin(F, G).