(SWI-プロローグを使用して次のプログラムをロードし、そのような回避方法複数の回答を探す際にグローバルスタックエラーが発生しましたか?
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).
私はエラーが私は再帰を処理する方法としなければならないことを仮定しているので、多分誰かがコードを見ていると私は間違っているつもりだところを私に伝えることができます。
'trace'を実行すると、何が起こっているのかがわかります。 – lurker