Prolog で数独ソルバーを書いています。数独自体は、ベクトルのベクトルとして与えられます。
P =
[[1,_,_, _,_,_, _,_,_],
[_,_,2, 7,4,_, _,_,_],
[_,_,_, 5,_,_, _,_,4],
[_,3,_, _,_,_, _,_,_],
[7,5,_, _,_,_, _,_,_],
[_,_,_, _,_,9, 6,_,_],
[_,4,_, _,_,6, _,_,_],
[_,_,_, _,_,_, _,7,1],
[_,_,_, _,_,1, _,3,_]].
これを次のコードでマトリックスに変換しています。
convert_to_matrix(P, Puzzle) :-
dim(Puzzle, [9, 9]), % create square matrix
( multifor([I, J], 1, 9), % fill array
param(P, Puzzle)
do
nth1(I, P, RowI),
nth1(J, RowI, Elem),
subscript(Puzzle, [I , J], Elem)
).
これは最初の 8 行と列では問題なく動作しますが、I または J のいずれかが 9 の場合は毎回失敗します。nth1(9,RowI, Elem) を実行しても、9 番目の要素は返されません (8 行の場合は 1 が返されるはずですが、新しい変数が返されます)。これは Eclipse-clp のバグですか、それとも何か不足していますか?