2013-04-26 42 views
1
parent(_,_). 
descendant(X,Y):- parent(Y,X). 
descendant(edward,david). 
descendant(malcolm,mark). 
descendant(edward,therese). 
descendant(malcolm,nathalie). 
descendant(matthew,raymond). 
descendant(matthew,nadine). 
sibling(X,Y):- descendant(X,Z), descendant(Y,Z). 
sibling(edward,kevin). 
sibling(sean,vicky). 
sibling(vicky,edward). 
sibling(malcolm,claude). 
sibling(matthew,stephania). 
sibling(matthew,kurt). 

這裏的問題是由於某些原因代碼無法正常工作。我的意思是說,無論我輸入關於這段代碼的什麼疑問,它總是返回true (我沒有在程序中包含所有的原子,因爲它只是一個簡單的男性(X)或女性(X),其中所有被包括的人都被覆蓋了,節省了你一些時間) 我的意思是: - 兄弟姐妹(edward,david)。真正。 對不起,如果我沒有任何意義,但如果有人會告訴我我在做什麼錯在這裏,我真的很感激它...我的事實錯誤? (Prolog)

父/ 2是一個直接謂詞(通過直接我的意思是它不是'用其他謂詞來定義),我的問題是,如果我將其更改爲父(X,Y),我會得到一個單例錯誤

+0

如果沒有用其他謂詞來定義它,那就意味着它是根據事實來定義的。那麼不需要添加任何事實。形式「父母(A,B)」的事實必須存在於某個地方。 – 2013-04-26 18:56:39

回答

3

代碼中的第一行(parent(_,_).)將始終成功。

因此,使用descendant/s的程序sibling/s使用parent/s也將總是成功至少一次。

您應該刪除該條款(parent(_,_).),因爲它似乎指出任何兩個人都是父母。

+0

事情是我的任務需要我包含父/ 2作爲一個直接變量,如果我將其更改爲父(X,Y)我得到一個單身變量錯誤 – 2013-04-26 14:15:38

+0

@EdwardBamber您先前的評論沒有意義。謂詞不是一個變量,我不知道「直接」變量應該是什麼。澄清你的問題,甚至更好,編輯它以包括最初的要求(不是由你重新措詞)。 – 2013-04-26 15:43:23

+0

對不起,我還是新的prolog(和聲明範式一般) 我現在將安排這個 – 2013-04-26 15:46:25