foo / 3是一个谓词,它使用两个列表执行某些操作并输出另一个列表。
foo([], Ys, Zs) :-
append(Zs, Ys, Final),
write(Final),
% ?
foo([X|Xs], Ys, Zs) :-
stuff(X, Ys, NewYs, NewZs),
foo(Xs, NewYs, NewZs).
我希望Final在顶级调用中成为L,如foo([1,2,3],[a,b,c],L)。我看着这条痕迹,似乎我正在做一些倒退的事情;
...
Exit: (9) write([c]) ?
Exit: (8) foo([], [], [c]) ?
Exit: (7) foo([c], [], []) ?
L = [].
答案 0 :(得分:1)
您可以将foo([], Ys, Zs)
更改为foo([], Ys, Final)
来解决此问题。
但是,你想做什么?您获得L=[]
的原因是因为Prolog使用空列表满足您的基本情况(foo([], Ys, Zs)
)。