我想写一个程序SWI-Prolog
来解决方程。我知道GNU Prolog
,这让我很紧张......这里有什么问题?
equation(X1,X2) :-
{
2*X1 + 3*X2 =:= 6,
{X1 is 0; X1 is 1},
{X2 is 0; X2 is 1}
}.
X1
并且X2
总是等于0
or 1
。
我有一个文件
:- [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.
文档的第 A.8.3 节说统一可以保持“外部”约束规范。然后你可以自由地尝试额外的边界。但是,如果您强制要求 A 和 B 都绑定,则应选择适当的值。AFAIK 您最初发布的值不能满足等式。