После загрузки следующей программы с помощью SWI-Prolog и ввода запросов, таких какКак избежать Out of global stack ERROR при поиске нескольких ответов?
cells([o,x,o,x,o], A).
или
cells(A, [o,x,o,x,o]).
первого результат, кажется, всегда быть правильными, но после подачи с запятой искать больше результатов (и я не знаю, должны ли быть дополнительные результаты в любом случае), я получаю ERROR SYSTEM PROLOG, в котором упоминается сбор мусора и ошибка внешнего глобального стека.
regla(o,o,o,o).
regla(x,o,o,x).
regla(o,x,o,o).
regla(o,o,x,x).
regla(x,o,x,x).
regla(x,x,o,x).
regla(o,x,x,x).
regla(x,x,x,o).
cells([X | XS], [Y | YS]) :-
X = o,
Y = o,
length([X | XS], LX),
LX >= 3,
length([Y | YS], LY),
LY is LX + 2,
append([o, o], [X | XS], W),
append(W, [o, o], Z),
cellsR(Z, [Y | YS]).
cellsR(_, []).
cellsR([A, B, C | R], [H | T]) :-
regla(A, B, C, H),
cellsR([B, C | R], T).
Я предполагаю, что ошибки должны делать с тем, как я обрабатывать рекурсию, так что, может быть, кто-то может взглянуть на код и скажите мне, где я буду неправильно.
Вы должны сделать «trace», и вы увидите, что происходит. – lurker