2016-10-30 82 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

Thankyou很棒 –