我试图根据事实找到规则并编写一些示例查询。但我无法理解其他查询逻辑。
% parent(X,Y) means that person X is a parent (father or mother) of person Y
parent(alex,julia).
parent(alex,rosa).
parent(lina,julia).
parent(lina,rosa).
parent(romeo,peter).
parent(julia,peter).
parent(rosa,silvia).
parent(oscar,ida).
parent(eva,ida).
parent(eva,bruno).
parent(peter,bruno).
parent(peter,georg).
parent(peter,irma).
parent(ruth,georg).
parent(ruth,irma).
parent(silvia,otto).
parent(silvia,pascal).
parent(irma,olga).
parent(irma,jean).
parent(otto,olga).
parent(otto,jean).
parent(jean,tina).
parent(marie,tina).
% male(X) means that X is a male person
male(alex).
male(romeo).
male(oscar).
male(peter).
male(bruno).
male(georg).
male(otto).
male(pascal).
male(jean).
% husband(X,Y) means that person X is the husband of person Y
husband(alex,lina).
husband(romeo,julia).
husband(oscar,eva).
husband(peter,ruth).
husband(otto,irma).
husband(jean,marie).
% female
female(X) :- \+ male(X).
% father
father(X,Y) :- parent(X,Y),male(X).
% mother
mother(X,Y) :- parent(X,Y),female(X).
% son
son(X,Y) :- male(X),parent(Y,X).
% daughter
daughter(X,Y) :- female(X),parent(Y,X).
% sibling
% brother
% sister
% wife
% grandchild
% grandparent
% grandfather
% grandmother
% uncle
% halfbrother
% halfsister
% stepbrother
% stepsister
% ancestor
% descendant
% father-in-law
% mother-in-law
% familycomn
答案 0 :(得分:1)
% female female(X) :- + male(X).
如果X不是男性,则X是女性(Prolog早于性别流动性)。
% father father(X,Y) :- parent(X,Y),male(X).
如果X是Y的父亲,而X是男性
,则X是Y的父亲%兄弟姐妹
sibling(X,Y) :- dif(X,Y),parent(Z,X),parent(Z,Y).
Y和X是兄弟姐妹,如果他们有一个共同的父母,但不是同一个人(cfr。@ lurker)
答案 1 :(得分:0)
%sibling 兄弟(X,Y): - 父亲(P,X),父亲(P,Y),母亲(Q,X),母亲(Q,Y)。
%兄弟 兄弟(X,Y): - 兄弟(X,Y),男(X)。
%妹妹 妹妹(X,Y): - 兄弟姐妹(X,Y),女性(X)。
%的妻子 妻子(X,Y): - 丈夫(Y,X)。
%孙子 孙子(X,Y): - 祖父母(Y,X)。
%祖父母 祖父母(X,Y): - 父(Z,Y),父(X,Z)。
%爷爷 祖父(X,Y): - 祖父母(X,Y),男(X)。 %奶奶 祖母(X,Y): - 祖父母(X,Y),女(X)。%叔叔 叔叔(X,Y): - 父(Z,Y),兄弟(X,Z)。
%halfbrother halfbrother(X,Y): - halfsibling(X,Y),male(X)。
%halfsister halfsister(X,Y): - halfsibling(X,Y),female(X)。
%stepbrother stepbrother(X,Y): - stepibling(X,Y),male(X)。
%stepsister stepsister(X,Y): - stepibling(X,Y),female(X)。
%祖先 祖先(X,Y): - 父(X,Y);父(X,Z),祖先(Z,Y)。
%后裔 后代(X,Y): - 祖先(Y,X)。