2013-02-13 197 views
2

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

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

X1X2总是等于或01

回答

2

我有

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

然后我编译和运行,我得到一个文件:

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

它的结果你期待?

编辑documentation

?- 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您最初公布的数值不能满足方程式。

+0

我想X1和X2是0或1,所以我需要为他们指定一个域,但我不知道如何。在GNU Prolog中,我会这样做:'fd_domain(X1,{0,1})'。在SWI Prolog中,我无法使其工作(我需要这个序言,因为这些因素可能是小数。 – Nickon 2013-02-14 09:33:51

+1

请参阅编辑,我将添加一些测试... – CapelliC 2013-02-14 09:59:35