2013-02-13 199 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