【发布时间】:2021-03-21 02:47:48
【问题描述】:
作为 Prolog 的新手,我了解到尾递归是经过优化的。因此,我正在尝试将以下程序转换为尾递归程序。
sum([], 0).
sum([H|T], N):-
sum(T, X),
N is X + H.
这是我尝试过的,很明显我在逻辑上遗漏了一些东西:
sum(List,Sum):-
sum1(List,0,Sum).
sum1([Element|List],Accumulator,Sum):-
(NewAccumulator is Accumulator + Element,
sum1(List,NewAccumulator,Sum);
List=[] -> Sum = Accumulator
).
我的程序中的问题是添加列表中除最后一个之外的所有数字。我该如何改进这个程序?谢谢。
【问题讨论】:
标签: prolog accumulator