2015-10-29 99 views
0

我在使用YAP序言來編寫序言時遇到了困難。我孤立我的問題的這兩行代碼:序言中的無限循環

is_a(G, A2):-is_a(G, A1), is_a_link(A1, A2). 
is_a(x, y). 

如果我把這兩行代碼在一個文件中,並諮詢文件,EN問序言如果is_a(x,y),程序永遠不會結束,導致我相信有一個無限循環涉及。

但我不明白爲什麼會出現一個循環,我只是問了序言它的一個公理是否屬實,是否應該不是這樣(沒有第二個想法)只是吐出來Yes

我的意思是,據我瞭解的方式序言作品,它會試圖找到在知識基礎,「證明」的說法真實的說明。我很困惑它爲什麼不簡單地返回公理。


編輯:

開關的代碼行,即

is_a(x, y). 
is_a(G, A2):-is_a(G, A1), is_a_link(A1, A2). 

使序言不會崩潰,因爲它顯然首先遇到真實的陳述。

+1

如何'is_a_link/2'實施?即使你與謂詞交換的事實,它仍然不會終止。它只是碰巧產生'x'和'y'的解決方案,而不是無限的只有一次。 – lurker

回答

0

重命名事實別的東西:

is_a_fact_or_whatever(x,y). 
is_as(G,A2) :- is_a_fact_or_whatever(G,A1), is_a_link(A1,A2).