1

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 のバグですか、それとも何か不足していますか?

4

1 に答える 1