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

时间:2012-02-09 10:23:21

标签: prolog arithmetic-expressions clpfd

我正在尝试解决prolog中的算术表达式(实现 - eclipse prolog)。要解决的算术表达式如下:

A * (C + B * X) + D * X = E

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).

'结果'和'X'的值应该绑定(分配)在一起。 如何编写prolog程序来执行此操作..?

谢谢。

1 个答案:

答案 0 :(得分:4)

我假设您使用的是fd,而不是ic。它简化了一些事情。

:-lib(fd).

进一步假设你只有方程而不是不等式,只有一个变量X,那么你可以分两步完成:

compute(L=R, X) :-
  term_variables(L, [X]),
  L #= R.

首先,从左侧提取变量,然后发布计算方程的约束。如果等式有效,这将实例化您的变量。

修改

使用ic库,使用eval(L)#=R