2013-05-02 126 views
1

我得到了以下問題的探析:
以下事實和謂詞的定義:防止無限循環的Prolog

father(avr, yit). 
male(avr). 
married(avr, sara). 
father(yit, yaak). 
married(rivka, yit). 
father(yaak, yosef). 
mother(rachel, yosef). 
father(yaak, levi). 
mother(leaa, levi). 
mother(zilpa, gad). 
father(yaak, dan). 
mother(bilhaa, dan). 
father(yosef, menashe). 
father(yosef, ephraim). 

are_married(X,Y) :- married(X,Y). 
are_married(X,Y) :- married(Y,X). 

我定義了以下謂詞:

married(X,Y) :- mother(X,Z) , father(Y,Z). 
mother(X) :- are_married(X,Y) , father(Y,_). 

目前,該問題的探析是母親由婚姻定義,婚姻是由母親定義的 - 結果是無限循環,程序崩潰。
我該如何防止無限循環?有沒有辦法告訴謂詞不要使用不同的謂詞?

+0

不,只是使用不同的名稱。這是最近問及回答,只是[瀏覽](http://stackoverflow.com/questions/tagged/prolog)通過一些最近的問題,並[這裏](http://stackoverflow.com/tags/prolog/new )通過答案。 – 2013-05-02 09:05:17

+0

[序列藝術中的左練習]的可能重複(http://stackoverflow.com/questions/16325238/left-of-exercise-from-the-art-of-prolog) – 2013-05-02 09:05:36

回答

1

爲什麼你需要重新寫媽媽?

只跳過

mother(X) :- are_married(X,Y) , father(Y,_). 

因爲你已經有一個(數據定義)的母親。