2016-10-30 9 views
1

私の知識ベースから兄弟ルールに質問を使用して?- issibling(jo,X). 戻りアリ(意味城は、城の妹です)。どんな助けもありがとう。プロローグ家系の問題

mother(ali,jess). 
father(dom,dan). 
mother(ali,dan). 
father(dom,jess). 
father(dom,tom). 
mother(ali,tom). 
father(dom,george). 
mother(ali,george). 
mother(jo,tracey). 

father(eddie,ali). 
mother(jenny,ali). 
father(eddie,jo). 
mother(jenny,jo). 

mother(belinda,dom). 
father(kieth,dom). 
mother(belinda,ben). 
father(kieth,ben). 

male(dom). 
male(tom). 
male(dan). 
male(george). 
male(eddie). 
male(kieth). 
female(jess). 
female(ali). 
female(jo). 
female(jenny). 
female(belida). 
male(ben). 
female(tracey). 

isparent(X,Y):-father(X,Y). 
isparent(X,Y):-mother(X,Y). 
ischild(Y,X):-isparent(X,Y). 

isgrandparent(X,Z) :- isparent(X,Y), isparent(Y,Z). 
issibling(X,Y) :- father(F,X),father(F,Y),mother(M,X),mother(M,Y). 
issister(X,Y) :- issibling(X,Y), female(X). 
isbrother(X,Y) :- issibling(X,Y), male(X). 
isaunt(X,Z) :- issister(X,Y),isparent(Y,Z). 
isuncle(X,Z) :- isbrother(X,Y),isparent(Y,Z). 
isson(X,Y) :- male(X),isparent(Y,X). 
isdaughter(X,Y) :- female(X),isparent(Y,X). 
iscousin(X,Y) :- isaunt(Z,Y),isparent(Z,X). 
isnephew(X,Z) :-ischild(X,Y),issibling(Z,Y). 

答えて

1

あなたはより読みやすいコードを検討することができます:代わりのissibling(X,Y)、多分siblings(S1,S2)を。

それは対称的関係を「ブレーク」、そしてできるだけ多くの抽象的関係を使用するようにするのに役立つのです。私は(未テストの例を)しようとするだろう

siblings(S1, S1) :- parent_of(P, S1), parent_of(P, S2), dif(S1, S2). 

代わりのDIF/2、(< @)/ 2できました同様に使用される。

+0

ありがとうございます –