我想问一下这个代码,为什么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]).
答案 0 :(得分:1)
L2不保留其价值。该程序应该按如下方式调用:
?- my_reverse([1,2,3,4], Z).
Z = [4, 3, 2, 1].
在此示例中,L2与Z统一。在my_rev谓词的第一个规则匹配之前,它将保持未分配状态。然后累加器与L2统一:在最后一步中,累加器的内容被“分配给”L2。