一旦在序言中被删除,如何查找某人是否是某人的表亲?

How to find if somebody is somebodies second cousin once removed in prolog?

我正在编写一个程序 return 如果一个人是另一个人的远房表亲,则为真。唯一已知的信息是谁是 parent 还有谁。我正在使用这里 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.

正如文章所述:"The child of one's second cousin".

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