SWI-Prolog中的方程求解器

时间:2013-02-13 15:30:56

标签: prolog clpq

我想在SWI-Prolog中编写一个解决方程式的程序。我知道GNU Prolog这让我很紧张......这里有什么问题?

equation(X1,X2) :-
  {
    2*X1 + 3*X2 =:= 6,
    {X1 is 0; X1 is 1},
    {X2 is 0; X2 is 1}
  }.

X1X2始终等于01

1 个答案:

答案 0 :(得分:2)

我有一个带

的文件
:- [library(clpq)].
eq(X1, X2) :- {2 * X1 + 3 * X2 =:= 6}.

然后我编译并运行,我得到:

?- eq(A,B).
{B=2-2 rdiv 3*A}.

这是你期待的结果吗?

修改

?- eq(A,B),A=1.
A = 1,
B = 4 rdiv 3.

?- eq(A,B),B=1.
A = 3 rdiv 2,
B = 1.

documentation的A.8.3节说,统一可以保持“外部”约束规范。然后你可以自由地尝试额外的边界。但是如果你强加A和B都会绑定,你应该选择合适的值。 AFAIK最初发布的值不能满足等式。