kal*_*far 2 arithmetic-expressions prolog clpfd
我正在尝试解决 prolog 中的算术表达式(实现 - eclipse prolog)。要解决的算术表达式是这样的:
A * (C + B * X) + D * X = E
Run Code Online (Sandbox Code Playgroud)
X 是要计算的值,所有其他(A、B、C、D、E)都是数字。
例如:5 * (3 + 2*X) + 2*X = 39,计算时应将 X 赋值为 2。
将输入 Prolog 的查询(目标)将采用以下形式:
?- compute( 5*(3+2*X)+2*X = 39, Result).
Run Code Online (Sandbox Code Playgroud)
'Result' 和 'X' 的值应该绑定(分配)在一起。我如何编写 prolog 程序来做到这一点..?
谢谢你。
我假设您使用fd,而不是ic. 它简化了一些事情。
:-lib(fd).
Run Code Online (Sandbox Code Playgroud)
进一步假设您只有方程而不是不等式,并且只有一个变量 X,那么您可以分两步完成:
compute(L=R, X) :-
term_variables(L, [X]),
L #= R.
Run Code Online (Sandbox Code Playgroud)
首先,从左侧提取变量,然后发布计算方程的约束。如果方程有效,这将实例化您的变量。
编辑
对于ic库,使用eval(L)#=R.