#prolog
Вопрос:
Я пытаюсь решить проблему криптографической головоломки с помощью пролога, и вопрос в том,
TWO TWO —————— FOUR
Вот мой код, не мог бы кто-нибудь, пожалуйста, помочь мне с этим вопросом?
solution (T, W, O, F, U, R) :- select(T, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], L1), select(W, L1, L2), select(O, L2, L3), select(F, L3, L4), select(U, L4, L5), member(R,L5), FOUR is F * 1000 O * 100 U * 10 R, TWO is T * 100 W * 10 O, FOUR is TWO TWO.
Комментарии:
1. На второй последней строке у вас есть строчная буква «о» вместо прописной «О». Вы также могли бы, возможно, написать
F * 1000 O * 100 U * 10 R =:= 2 * (T * 100 W * 10 O)
2. что вы имеете в виду под
member(R,15)
этим ?
Ответ №1:
Ваша программная логика кажется правильной.
Просто синтаксическая ошибка: вы не можете поставить пробел между именем процедуры и (
. Таким образом, руководителем вашей процедуры должен быть solution(T, W, O, F, U, R) :-
.
Может быть, вы хотите избежать F
бытия 0
. В этом случае измените ограничения(и, возможно, измените назначение букв). Вы также можете добавить параметры ДВА и ЧЕТЫРЕ:
solution(T, W, O, F, U, R, TWO, FOUR) :- select(F, [1, 2, 3, 4, 5, 6, 7, 8, 9], L1), % F cannot be 0 select(T, [0|L1], L2), select(W, L2, L3), select(O, L3, L4), select(U, L4, L5), member(R,L5), FOUR is F * 1000 O * 100 U * 10 R, TWO is T * 100 W * 10 O, FOUR is TWO TWO.
Печать всех решений:
?- solution(T, W, O, F, U, R, TWO, FOUR), writeln(TWO TWO = FOUR),fail. 734 734=1468 765 765=1530 836 836=1672 846 846=1692 867 867=1734 928 928=1856 938 938=1876 false.