2015-01-07 24 views
2

我嘗試做一些練習 - 在「表示」中表示「0」爲零,s(0)爲1,s(s(0))爲2等等。 。 我試圖編寫謂詞來添加「s號碼」: 謂詞s2int將「號碼」轉換爲int。提示不會回來

s2int(0, 0). 
s2int(s(X), Y) :- 
    s2int(X, Y1), 
    Y is 1 + Y1. 

add(X, Y, Z) :- 
    s2int(X, SX), 
    s2int(Y, SY), 
    s2int(Z, SZ), 
    SZ is SX + SY. 

當我查詢添加它寫入正確的答案,但提示不會回來。 什麼問題?

回答

4

您的add/3的定義工作正常,並且也終止,如果所有三個參數都給出。如果你將其中的一個作爲變量,那麼其中一個目標s2int(XYZ, SXYZ)就有兩個未被證實的變量作爲參數。因此它描述了一個無限大的集合,它的完整枚舉需要無限長的時間。

不知道你在做什麼,但可能你想爲後繼算術定義add/3。你可以做到這一點,而不訴諸於0,1,2整數!嘗試一下!否則搜索