Prolog代码的意外行为

时间:2013-12-25 18:16:55

标签: prolog

我想问一下这个代码,为什么List L2保持它的值,当函数开始从Recursion返回它的值时,它就像'Hold'它自己,我认为列表L2必须返回它的原始值!!

my_reverse(L1,L2) :- my_rev(L1,L2,[]).

my_rev([],L2,L2) :- !.
my_rev([X|Xs],L2,Acc) :- my_rev(Xs,L2,[X|Acc]).

1 个答案:

答案 0 :(得分:1)

L2不保留其价值。该程序应该按如下方式调用:

?- my_reverse([1,2,3,4], Z).
Z = [4, 3, 2, 1].

在此示例中,L2与Z统一。在my_rev谓词的第一个规则匹配之前,它将保持未分配状态。然后累加器与L2统一:在最后一步中,累加器的内容被“分配给”L2。