次の 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
Web での正しい実装を見つけることができると確信してreverse function
いますが、このエラーの原因を知りたいです。