家庭等级的Prolog计划

时间:2018-02-05 18:31:38

标签: prolog

我试图根据事实找到规则并编写一些示例查询。但我无法理解其他查询逻辑。

% 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

2 个答案:

答案 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)。