Prolog でミニ数独ソルバーを書いています。数独は 4x4 フィールドで構成されています。
_ _ 2 3
_ _ _ _
_ _ _ _
3 4 _ _
数独に考えられる解が 1 つしかない場合 (上記の数独のように)、私のプログラムは期待どおりに動作します。しかし、与えられたフィールドの少なくとも 1 つをギャップに置き換えると (たとえば、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).
私は何を間違っていますか?