Криптоарифметическое умножение возвращает false

Я бы подумал, что мой пролог-код подойдет для этой задачи на умножение, но он возвращает 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).

person user2318083    schedule 16.05.2014    source источник


Ответы (1)


Вы использовали одну и ту же переменную 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).
person Tudor Berariu    schedule 16.05.2014