Криптарифметическая головоломка (Пролог)

Меня попросили написать код Пролога для решения криптоарифметической головоломки, используя «генерировать и тестировать». Например, я получаю solve([R,O,B],[B,E,R,T],[N,O,R,E,S]), и мне нужно найти назначение букв. Поэтому я написал этот код:

sum(List1,List2,SumList) :-
    append(List1,List2,List3),
    append(List3,SumList,AllList),
    assign([0,1,2,3,4,5,6,7,8,9],AllList),
    add_zero(List1,List1Z),
    add_zero(List2,List2Z),
    add_zero(SumList,SumListZ),
    name(Num1,List1Z),
    name(Num2,List2Z),
    name(SumNum,SumListZ),
    SumNum is Num1+Num2,
    !.

remove(X,[X|Xs],Xs).
remove(X,[_|Ys],Res) :-
    remove(X,Ys,Res).

assign(Digits,[X|Tail]) :-
    nonvar(X),
    !,
    assign(Digits,Tail).
assign(Digits,[X|Tail]) :-
    remove(X,Digits,D1),
    assign(D1,Tail).
assign(_,[]) :-
    !.

add_zero([X|Tail1],[Y|Tail2]) :-
    !,
    Y is X+48,
    add_zero(Tail1,Tail2).
add_zero([],[]) :-
    !.

Но у меня есть ошибка, и я не могу ее найти... вы можете мне помочь?


person Ygandelsman    schedule 09.08.2012    source источник
comment
очень близкий вопрос: stackoverflow .com/questions/10925285/   -  person Will Ness    schedule 10.08.2012
comment
Привет, это старая ветка вопросов, но у меня проблемы с ее пониманием. add_zero([X|Tail1],[Y|Tail2]) :- !, Y равно X+48, add_zero(Tail1,Tail2). Почему Y это X+48? Что здесь делает функция add_zero? Не могли бы вы помочь мне понять. Спасибо.   -  person Clojurevangelist    schedule 24.03.2019


Ответы (1)


Проблема с вашим кодом заключается в том, что во втором предложении remove/3 вы не сохраняете элемент, который не удаляется. Следует читать:

remove(X,[Y|Ys],[Y|Res]):-
    remove(X,Ys,Res).

Я попробовал ваш код с ОТПРАВИТЬ + БОЛЬШЕ = ДЕНЬГИ, и после исправления этой процедуры он работал нормально.

Однако он не нашел решения для ROB + BERT = NORES... Согласно на этом сайте, на котором много решателей, ваше уравнение не имеет решения.

person gusbro    schedule 09.08.2012
comment
Нет решения для rob+bert=nores: bach.istc.kobe- u.ac.jp/llp/crypt.html - person Haile; 09.08.2012