Prolog 编写一个谓词,如果Person1和Person2具有相同的姓氏,则返回true

Prolog 编写一个谓词,如果Person1和Person2具有相同的姓氏,则返回true,prolog,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, jen

我们假设每个人的姓氏都与他们的父亲相同,但已婚妇女保留他们原来的出生名

例如:

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.

但它似乎不起作用。我对prolog非常陌生,因此如果有任何帮助,我将不胜感激。

您的事实中姓氏在哪里?@GuyCoder没有。我们必须通过假设“每个人的姓氏都与他们的父亲相同,但已婚妇女保留其原始出生名”来计算。如果两人的姓氏相同,则返回true或false。所以我写了检查祖父和兄弟姐妹的条件来检查家族的名字啊!我现在明白了。@GuyCoder你认为我哪里错了?帕特和约翰和吉姆都结婚了吗?正如我所指出的,判断一对夫妇是否结婚的唯一方法是寻找有普通子女的父母。所以
Darren
有父母
父母(约翰,达伦)。
父母(帕特,达伦)。
大脑
有父母
父母(吉姆,布莱恩)。
父母(帕特,布莱恩)。
帕特的姓氏如何确定?
same_name(P1,P2) :-
 check_siblings(P1,P2),
 check_grandfather(P1,P2).