1

我在ECLiPSe下有我的CSP問題。我希望通過2實例化故障ECLiPSe CSP

[eclipse 11]: test(Xs). 
instantiation fault in (_268{[1..4]}*100 + _200{[0..9]}*10 + _302{[0..9]}*1) mod 2#=0 
Abort 

感謝您的幫助,以添加約束到我的密碼這需要由兩個代表的數整除。

我的代碼:

/* 
      T W O           
    + T H R E E  
    + T H R E E          
     ---------          
     E I G H T          
*/ 

:- lib(fd). 

myCsp(Xs):- 
    Xs=[W,I,G,H,T,R,O,E], 
    Xs::0..9, 
    [C1,C2,C3,C4]::0..2, 
    T #> 0,E #> 0, 
    O + E + E #= C1*10 + T, 
    W + E + E + C1 #= C2*10 + H, 
    T + R + R + C2 #= C3*10 + G, 
    H + H + C3 #= C4*10 + I, 
    T + T + C4 #= E, 
    (T*100 + W*10 + O*1) mod 2 #= 0, 
    alldifferent([W,I,G,H,T,R,O,E]). 

test(Xs):- 
    myCsp(Xs), 
    labeling(Xs). 
+0

你爲什麼使用'(is)/ 2'?使用CLP(FD)約束'(#=)/ 2'來表示整數表達式的相等性! – mat

+0

謝謝!我在myCsp中將'myModulo2(T,W,O)'替換爲'T * 100 + W * 10 + O * 1#=/2'。但是現在我有一個語法錯誤:#​​=/2 postfix/infix operator expected? – superyo40

+1

哦,來吧!你已經在你的程序的其他地方使用了'(#=)/ 2'(提示:這是你的代碼段中最常用的謂詞)。只需在剩下的兩個地方使用它! – mat

回答

5

國防部/ 2操作

(T*100 + W*10 + O*1) mod 2 #= 0 

不支持。您可以將該行重寫爲

T*100 + W*10 + O*1 #= 2*_ 

其中說左側表達式等於匿名整數變量的兩倍,因此是兩倍。