1

ECLiPSe の下で CSP に問題があります。TWO で表される数が 2 で割り切れることを要求する制約を暗号文に追加したいと考えています。

[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).
4

1 に答える 1

5

mod/2 操作

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

はサポートされていません。次のように行を書き換えることができます

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

これは、左辺の式が無名整数変数の 2 倍に等しく、したがって 2 の倍数であることを示しています。

于 2016-02-26T01:11:26.127 に答える