我不认为我得到Prolog的递归

时间:2011-03-31 14:33:14

标签: prolog

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 = [].

1 个答案:

答案 0 :(得分:1)

您可以将foo([], Ys, Zs)更改为foo([], Ys, Final)来解决此问题。

但是,你想做什么?您获得L=[]的原因是因为Prolog使用空列表满足您的基本情况(foo([], Ys, Zs))。