加载使用SWI-Prolog的下面的程序和进入这类查询作为如何避免查找多个答案时出现全局堆栈错误?
cells([o,x,o,x,o], A).
或
cells(A, [o,x,o,x,o]).
的第一个结果似乎永远是正确的,而后提交分号后,寻找更多的结果(并且我不知道在这两种情况下是否应该有额外的结果),我得到了PROLOG SYSTEM ERROR分别提到了垃圾收集和全局堆栈错误。
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).
我假设的错误与我处理递归的方式做的,所以也许有人可以看看代码,并告诉我,我要去哪里错了。
你应该做一个“跟踪”,你会看到发生了什么。 – lurker