prolog求解中的算术表达式

时间:2017-09-21 05:10:35

标签: prolog

给出一个表达式: (x*0+6)*(x-x+3+y*y)和y的值:2谓词应该只给出一个

解决方案(x*0+6)*(x-x+3+4).

当给出6*(3+x*x) and x:2时,它应该给出输出42。 我已经编写了几个小时,我可以设法只得到它的第二部分。我的代码发布在下面。可以帮助我解决一些问题。

partial_eval(Expr0, Var,Val, Expr) :-
   evaluate(Expr0,[Var:Val],Expr).

evaluate(Exp, LstVars, Val) :-
   analyse(LstVars, Exp, NewExp),
   Val is NewExp.

analyse(LstVars, Term,R) :-
   functor(Term, Term, 0), !,
   (   member(Term : V, LstVars)
   ->  R = V
   ;   R = Term ).
analyse(LstVars, Term, V) :-
   functor(Term, Name, _),
   Term =.. [Name | Lst],
   maplist(analyse(LstVars), Lst, LstV),
   V =.. [Name|LstV].

1 个答案:

答案 0 :(得分:0)

此问题可以分为两部分:一是用值代替变量。另一个是递归地评估算术子表达式。 Prolog不是确定性的,但是这两个操作都是确定性的,因此在实现它们时要牢记一些事情。

对于替换部分,您似乎具有良好的通用递归结构(使用= ..)。对于算术评估部分,您可能会发现在递归中更容易使用+和*项。希望可以帮助您入门,询问是否遇到困难并需要更多建议。