密码乘法返回false

时间:2014-05-16 21:13:51

标签: prolog cryptarithmetic-puzzle

我认为我的prolog代码可以解决这个乘法问题,但它会返回false。我错过了什么吗?

solve(T,W,O,S,I,X,E,L,V) :-
        X = [T,W,O,S,I,X,E,L,V],
        Digits = [0,1,2,3,4,5,6,7,8,9],
        assign_digits(X, Digits),
        T > 0, 
        S > 0,
        (100*T + 10*W + O) * (100*S + 10*I + X) =:=
        100000*T + 10000*W + 1000*E + 100*L + 10*V + E,
        write(X).

1 个答案:

答案 0 :(得分:3)

您对数字和变量列表使用了相同的变量X.

只需重命名代表所有变量列表的变量:

solve(T,W,O,S,I,X,E,L,V) :-
       Vars = [T,W,O,S,I,X,E,L,V],
       Digits = [0,1,2,3,4,5,6,7,8,9],
       assign_digits(Vars, Digits),
       T > 0,
       S > 0,
       (100*T + 10*W + O) * (100*S + 10*I + X) =:=
       100000*T + 10000*W + 1000*E + 100*L + 10*V + E,
       write(Vars).