我正在 Prolog 中编写一个迷你数独求解器。数独由 4x4 字段组成,例如
_ _ 2 3
_ _ _ _
_ _ _ _
3 4 _ _
如果数独只有一种可能的解决方案(如上面的数独),我的程序按预期工作。但是如果我用一个间隙替换至少一个给定的字段(例如,用 _ 替换 4),Prolog 的输出是这样的:
[_#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).
我究竟做错了什么?