写一个谓词same_name(Person1,Person2),如果Person 1和Person 2具有相同的姓氏,则返回true

时间:2017-04-04 16:31:03

标签: prolog

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很新,所以任何帮助都会受到赞赏。

0 个答案:

没有答案