2
我寫了下面的Prolog代碼:「走出本地堆棧的」扭轉名單
concatenate([X|L1], L2, [X|L3]) :- concatenate(L1, L2, L3).
concatenate([], L, L).
rev([X|L], Y) :- concatenate(Z, [X], Y), rev(L, Z).
rev([], []).
如果我做了一些疑問,如:
?- rev([1,2,3], [3,2,1]). -> true
?- rev([1,2,3], [ X, Y, Z]). -> X=3, Y=2, Z=1
這是確定的,但如果我這樣做:
?- rev([1, 2, 3], X).
我得到:
ERROR: Out of local stack
我確定我可以在網上找到reverse function
的正確實現,但是我想知道是什麼導致了這個錯誤。
不是一個解決辦法,但你可以嘗試在每個步驟中的印刷值調試問題。 – nhahtdh