Я пытаюсь построить шахматную игру в Прологе, и я начал с изучения этой статьи о переполнении стека Как получить доступ к двумерному массиву в прологе и как l oop каждый элемент в нем , потому что я думаю, что игра в шахматы включает в себя данные доски и фигур в виде двумерного массива. Поэтому сейчас я пытаюсь поэкспериментировать с более простым массивом, чтобы понять, как он работает в первую очередь.
Используя большинство примеров кода, приведенных в ссылке выше, я написал предикат print_array(Array)
вместе с код ниже.
arraysample([[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]]).
array1([[1],[2],[3],[4],[5]]).
print_array(Array):-
print_rows(Array).
print_rows([]):-
write(''),nl. % trying to create a new line before moving on to the next row,
% but at this moment it's not working
print_rows([Row|Rows]):-
print_row(Row),
print_rows(Rows).
print_row([]).
print_row([Cell|Columns]):-
print_cell(Cell),
print_row(Columns).
print_cell(Cell):-
write(Cell),
write(' ').
и когда я вызываю предикат с таким жестко-закодированным массивом, он правильно распечатывает массив с результатом true
.
?- print_array([[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]]).
[1] [2] [3] [4] [5] [6] [7] [8] [9]
true.
Но когда я использую имя массива, он терпит неудачу.
?- print_array(array1).
false.
И когда я использовал trace
, чтобы увидеть, что происходит, мне показалось только что-то вроде этого.
?- trace(print_array(array1)).
% print_array/1: [call,redo,exit,fail]
true.
Почему сбой вызова предиката с именем массива в то время как он работает с жестко закодированным массивом? Как мне заставить его работать с именем массива?
ПРИМЕЧАНИЕ. Пожалуйста, предоставьте мне несколько конкретных примеров, показывая мне код, когда вы отвечаете на мой вопрос, так же, как я вставил свой код в свой вопрос. Если вы думаете о публикации абстрактного комментария типа «Прочитайте документацию Пролога, точка.», Который вообще не является ответом ни на один конкретный c вопрос, не пишите ничего в первую очередь. Заранее спасибо.