这是一个我遇到问题的测试复习问题。您如何编写一种方法来使用运算符“加号”、“减号”和“次”来评估代数表达式。以下是一些测试查询:
简化(表达式、结果、列表)
?- 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
我得到的只是这些示例查询,没有其他解释。但我很确定该方法应该剖析第一个参数,它是代数表达式,用 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) :-
我不确定第五种方法应该是什么。