2017-03-06 70 views
0

我做了下面的程序是這樣的:有什麼不妥以下Prolog程序

eval([],_,_). 
eval([(U, V)| Tail], X, Y):- 
    Y + evaluate([Tail], X, Y), Y is U * (X ** V). 

返回假的,我不知道爲什麼。我該如何解決它?

所以這eval([(4,3), 4, X)應該返回256。 和eval([(4,3),(1,0)], 4, X).應返回257

現在我得到這個錯誤」

ERROR: Undefined procedure: (+)/2 
ERROR: In: 
ERROR: [9] _5562+eval([...],4,_5572) 
ERROR: [8] eval([(4,3),...],4,_5606) at c:/users/parya lotfi/desktop/exe2.pl:2 
ERROR: [7] <user> 
+1

我並不總是** **返回'FALSE'!像'的eval([],1,0)'成功! – false

+1

您需要給出一個具體的例子,你期望它是真實的 – false

+0

'Y + evaluate([Tail],X,Y)'應該做什麼?在Prolog中,謂詞成功,失敗或者不終止。不要返回像函數這樣的值,這就是爲什麼你會得到這個錯誤。在這個上下文中,'+'沒有定義在Prolog中。 – lurker

回答

2
eval([], _,0). 
eval([(U,V)|UVs], X, Y0) :- 
    eval(UVs, X, Y1), 
    Y0 is Y1 + U*X^V. 

?- eval([(4,3),(1,0)], 4, X). 
X = 257.