给出一个表达式:
(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].
答案 0 :(得分:0)
此问题可以分为两部分:一是用值代替变量。另一个是递归地评估算术子表达式。 Prolog不是确定性的,但是这两个操作都是确定性的,因此在实现它们时要牢记一些事情。
对于替换部分,您似乎具有良好的通用递归结构(使用= ..)。对于算术评估部分,您可能会发现在递归中更容易使用+和*项。希望可以帮助您入门,询问是否遇到困难并需要更多建议。