gpt4 book ai didi

prolog - Prolog 求解中的算术表达式

转载 作者:行者123 更新时间:2023-12-02 01:28:19 24 4
gpt4 key购买 nike

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

(x*0+6)*(x-x+3+4)。

当给出 6*(3+x*x) 和 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].

最佳答案

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

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

关于prolog - Prolog 求解中的算术表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46335898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com