我编写了以下 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
在网上找到正确的实现,但我想知道是什么导致了这个错误。