РЕДАКТИРОВАТЬ: Смотрите мой ответ ниже, почему я дурак.В этом все еще есть загадка, на которую я бы хотел ответить.
Я застрял на этом слишком долго.Я пытаюсь распечатать решение судоку в красивой сетке.
Думаю, у меня возникли проблемы, потому что я не понимаю какую-то ключевую часть работы сопоставления с образцом в Прологе.
Без лишних слов, мой код:
prettier_print([]).
prettier_print([Puzzle]) :- prettier_print(0, [Puzzle]).
prettier_print(0, Puzzle) :-
writeln('┌───────┬───────┬───────┐'),
prettier_print(1, Puzzle).
prettier_print(4, Puzzle) :-
writeln('│───────┼───────┼───────│'),
prettier_print(5, Puzzle).
prettier_print(8, Puzzle) :-
writeln('│───────┼───────┼───────│'),
prettier_print(9, Puzzle).
prettier_print(12, []) :-
writeln('└───────┴───────┴───────┘').
prettier_print(N, [Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9 | Puzzle]) :-
member(N, [1,2,3,5,6,7,9,10,11]), % tried this when the line below did not work
% N =\= 0, N =\= 4, N =\= 8, N =\= 13,
format('│ ~d ~d ~d │ ~d ~d ~d │ ~d ~d ~d │~n', [Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9]),
succ(N, N1),
prettier_print(N1, Puzzle).
Вот вызов:
prettier_print(0, [1,2,3,4,5,6,7,8,9,
2,2,3,4,5,6,7,8,9,
3,2,3,4,5,6,7,8,9,
4,2,3,4,5,6,7,8,9,
5,2,3,4,5,6,7,8,9,
6,2,3,4,5,6,7,8,9,
7,2,3,4,5,6,7,8,9,
8,2,3,4,5,6,7,8,9,
9,2,3,4,5,6,7,8,9]).
А вот вывод:
┌───────┬───────┬───────┐
│ 1 2 3 │ 4 5 6 │ 7 8 9 │
│ 2 2 3 │ 4 5 6 │ 7 8 9 │
│ 3 2 3 │ 4 5 6 │ 7 8 9 │
│───────┼───────┼───────│
│ 4 2 3 │ 4 5 6 │ 7 8 9 │
│ 5 2 3 │ 4 5 6 │ 7 8 9 │
│ 6 2 3 │ 4 5 6 │ 7 8 9 │
│───────┼───────┼───────│
│ 7 2 3 │ 4 5 6 │ 7 8 9 │
│ 8 2 3 │ 4 5 6 │ 7 8 9 │
│ 9 2 3 │ 4 5 6 │ 7 8 9 │
└───────┴───────┴───────┘
true ;
false.
Проблемаесли он НЕ ПРОСТО возвращает с истиной, я должен нажать ;
, а затем он возвращает ложь.Это, в свою очередь, означает, что мое prettier_print/1
правило не работает должным образом.
Я думаю, что знаю достаточно, чтобы понять, что это означает:
Пролог откатывает назад и пытается по-другому интерпретировать мои правила(видя, есть ли что-то еще, с чем это может объединиться, если я правильно понимаю мои условия).Это находит еще одну вещь, которую можно объединить с этим, но это немедленно терпит неудачу.Это правильно?
Я хочу, чтобы была только одна возможная интерпретация.Как я могу исправить свою функцию, чтобы это значило?
Спасибо за любую помощь, я чувствую себя таким дураком!