Я пишу решатель судоку в Прологе. Само судоку дается как вектор векторов:
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, P, RowI) делает RowI совершенно новой переменной вместо 9-го вектора / строки. Выполнение nth1 (9, RowI, Elem) не возвращает 9-й элемент (для восьмой строки он должен возвращать 1, но возвращает новую переменную). Это ошибка в Eclipse-clp или я что-то упустил?