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).