Я пишу мини-решатель судоку на Прологе. Судоку состоит из полей 4x4, например.
_ _ 2 3
_ _ _ _
_ _ _ _
3 4 _ _
Если судоку имеет только одно возможное решение (как судоку выше), моя программа работает, как и ожидалось. Но если я заменю хотя бы одно заданное поле пробелом (например, заменив 4 на _), вывод Пролога будет таким:
[_#3(1:4),_#23(1:4),2,3.....
Я предполагаю, что «_ # 3 (1: 4)» означает «возьмите 1 или 4», но я хочу, чтобы каждое решение было в отдельном однозначном списке. Это мой код:
sudoku(Puzzle,Solution):-
Puzzle=Solution,
fd_domain(Solution,1,4),
Puzzle=[S11,S12,S13,S14,
S21,S22,S23,S24,
S31,S32,S33,S34,
S41,S42,S43,S44],
fd_all_different([S11,S12,S13,S14]),
fd_all_different([S21,S22,S23,S24]),
fd_all_different([S31,S32,S33,S34]),
fd_all_different([S41,S42,S43,S44]),
fd_all_different([S11,S21,S31,S41]),
fd_all_different([S12,S22,S32,S42]),
fd_all_different([S13,S23,S33,S43]),
fd_all_different([S14,S24,S34,S44]),
fd_all_different([S11,S12,S21,S22]),
fd_all_different([S13,S14,S23,S24]),
fd_all_different([S31,S32,S41,S42]),
fd_all_different([S33,S34,S43,S44]).
Когда я загрузил его в Gnu Prolog, я набрал следующий запрос:
sudoku([_,_,2,3,_,_,_,_,_,_,_,_,3,_,_,_],Sol).
Что я делаю неправильно?