2014-11-14 38 views
0

我一直在努力解決的難題序言: - 錯誤代碼

? − evalExp(exp(−, exp(∗, 3, 4), exp(/, 2, 3)), N). 
N = 11.333333333333334. 

我的代碼是工作在Windows,但不是在ubuntu.This工作是我的代碼。

evalExp(exp(X,L,R),N):-expr(exp(X,L,R),N). 
expr(exp(-,L,R),N):-expr(L,N1),expr(R,N2),N is N1-N2. 
expr(exp(+,L,R),N):-expr(L,N1),expr(R,N2),N is N1+N2. 
expr(exp(*,L,R),N):-expr(L,N1),expr(R,N2),N is N1*N2. 
expr(exp(/,L,R),N):-expr(L,N1),expr(R,N2),N is N1/N2. 
expr(exp(**,L,0),N):-N=1. 
expr(exp(**,L,R),N):- 
    expr(L,N1),expr(R,N2),P is N2-1,expr(exp(**,N1,P),N3),N is N1*N3. 
expr(A,N):- N is A. 
+0

你需要解釋「不工作」 , 請。另外,您使用的是哪個Prolog解釋器? SWI? – lurker 2014-11-14 15:20:10

回答

0

我不能在代碼中看到您的基本情況。你應該有一個代碼來回溯。

0

你的問題是你的最後一個條款,它在回溯時將嘗試評估表達式。 它可以通過檢查輸入值(您的子句中的A)是一個數字來解決。所以最後一句應改爲:

expr(N,N):- number(N). 

還有與**處理與參數0在從句中作單變量,它應該閱讀:

expr(exp(**,_,0),N):-N=1. 
+0

完成你所說的話之後,我的代碼在windows中工作,但在ubuntu中顯示爲false – Squirtle 2014-11-14 14:05:19

+0

@ChimedPalden:檢查Ubuntu代碼中的拼寫錯誤。建議的更改後,您的代碼看起來很好。 – gusbro 2014-11-14 14:20:37