2011-03-31 19 views
0

foo/3是一個謂詞,用兩個列表做一些事情並輸出另一個列表。我不認爲我得到Prolog的遞歸

foo([], Ys, Zs) :- 
    append(Zs, Ys, Final), 
    write(Final), 
    % ? 

foo([X|Xs], Ys, Zs) :- 
    stuff(X, Ys, NewYs, NewZs), 
    foo(Xs, NewYs, NewZs). 

我想最終成爲像foo([1,2,3],[a,b,c],L)這樣的頂級調用中的L)。我看着蹤跡,似乎我正在做一些倒退;

... 
    Exit: (9) write([c]) ? 
    Exit: (8) foo([], [], [c]) ? 
    Exit: (7) foo([c], [], []) ? 
L = []. 
+0

如果您更具體地描述*您想要做什麼,這個問題可能會更容易回答。 – 2011-03-31 17:57:20

回答

1

您可以通過將foo([], Ys, Zs)更改爲foo([], Ys, Final)來解決此問題。

但是,你想要做什麼?您得到L=[]的原因是因爲Prolog滿足您的基本情況(foo([], Ys, Zs))和空的列表。