這是一個測試複習問題,我遇到了麻煩。你如何編寫一種方法來評估代數表達式,用運算符'plus','minus'和'times'來表示。下面是一些測試查詢:Prolog - 評估代數表達式
簡化(表達式,結果列表)
?- simplify(plus(times(x,y),times(3 ,minus(x,y))),V,[x:4,y:2]). V = 14
?- simplify(times(2,plus(a,b)),Val,[a:1,b:5]). Val = 12
?- simplify(times(2,plus(a,b)),Val,[a:1,b:(-5)]). Val = -8
所有我得到了這些樣本查詢,沒有其他的解釋。但我很確定該方法應該剖析第一個參數,即代數表達式,用第三個參數(List)中的x和y代替它們的值。第二個參數應該是評估表達式後的結果。我認爲其中一種方法應該是簡化(V,Val,L): - 成員(V:Val,L)。理想情況下,應該只有4種方法...但我不知道如何去做這件事。
我有什麼事這麼遠,但我不知道身體應該是什麼:
simplify(Var, Value, Lst) :- member(Var:Value, Lst).
simplify(plus(Var), Value, Lst) :-
simplify(minus(Var), Value, Lst) :-
simplify(times(Var), Value, Lst) :-
我不知道第五方法應該是什麼。
當然好像和[this one]類似(http://stackoverflow.com/questions/15150232/evaluating-an-algebraic-expression);) – 2013-03-02 04:46:42