如何在prolog中进行算术表达式评估?

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 程序来做到这一点..?

谢谢你。

twi*_*rer 5

我假设您使用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.