2013-05-27 53 views
3

我是新來的Prolog我試圖寫它計算如下謂詞:給予時 謂詞的名字是s2int:基本PROLOG計數

  • s2int(0,Y),它768,16「回報「Y = 0。
  • s2int(s(0),Y)=> Y = 1。 (s(0)),Y)=> Y = 2。 (s(s(0))),Y)=> Y = 3。

等.. 這裏就是我試着寫(很差), 一開始我嘗試此代碼:

s2intAux(0,Y). 
s2intAux(X,Y):- X = s(Z) ,Y1 is Y+1, s2intAux(Z,Y1). 

,但每當我試圖通過鍵入s2intAux(運行它s(0),Y)我得到一個錯誤說:「錯誤:是/ 2:參數沒有充分實例化」 我得到這個錯誤,因爲Y是未定義的。 那麼我想這一個:

s2intAux(0,Y). 
s2intAux(X,Y):- X = s(Z) ,Y1 is Y+1, s2intAux(Z,Y1). 

s2int(X,Y):- Y1 is 0, s2intA(X,Y1). 

(我試圖與零值開始年,但這個並沒有在所有的工作) 我已經卡住了幾個小時,現在這就是我爲什麼現在轉向你們,請幫忙! 謝謝。

回答

2

您需要以下解決最簡單的情況:

s2intAux(0,0). 

這將導致s2intAux(0,Y)是真的當Y實例爲0

在你以後的行,你不必如果您用完s(.),則會將Z解析爲0。爲此,您需要照顧單個s(0)的情況。上一般情況下,我們必須遍歷才能到Y is 1纔可以解開備份和最終分配Y to Y1 + 1

s2intAux(X,Y) :- X = s(0), Y is 1. 
s2intAux(X,Y) :- X = s(Z), s2intAux(Z,Y1), Y is Y1 + 1. 

注:然後你就可以做的一般情況。

你也可以寫第一行只是:

s2intAux(s(0),Y) :- Y is 1. 

最後的答案是這樣的:

s2intAux(0,0). 
s2intAux(s(0),Y) :- Y is 1. 
s2intAux(X,Y) :- X = s(Z), s2intAux(Z,Y1), Y is Y1 + 1.