parent(albert, jim).
parent(albert, peter).
parent(jim, brian).
parent(john, darren).
parent(peter, lee).
parent(peter, sandra).
parent(peter, james).
parent(peter, kate).
parent(peter, kyle).
parent(brian, jenny).
parent(irene, jim).
parent(irene, peter).
parent(pat, brian).
parent(pat, darren).
parent(amanda, jenny).
female(irene).
female(pat).
female(lee).
female(sandra).
female(jenny).
female(amanda).
female(kate).
male(albert).
male(jim).
male(peter).
male(brian).
male(john).
male(darren).
male(james).
male(kyle).
我们假设每个人的姓氏都与父亲一样,但已婚妇女保留原来的姓氏。
示例:
?- same_name(pat, brian).
false.
?- same_name(jenny, jim).
true
我写了条件来检查他们是否有同一个父亲或其中一个是祖父:
check_grandfather(A,B) :-
parent(A,X),
parent(X,B).
check_siblings(A,b) :-
parent(X,A),
parent(X,B),
A \== B.
但我无法理解如何使用条件来检查same_name。 我想的是,
same_name(P1,P2) :-
check_siblings(P1,P2),
check_grandfather(P1,P2).
但它似乎不起作用。我对prolog很新,所以任何帮助都会受到赞赏。