Как новичок в 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
).
Проблема в моей программе - складывать все числа, кроме последнего в списке. Как я могу улучшить эту программу? Спасибо.