Синтаксическая ошибка пролога: . или оператор, ожидаемый после ошибки(ошибок) выражения 1, не удалось выполнить компиляцию

#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.