Следующий код предназначен для добавления двух списков.Как сделать этот код хвостом рекурсивным?
fun {AppendLists L1 L2}
if L1 == nil then L2
else
L1.1 | {AppendLists L1.2 L2}
end
end
Следующий код предназначен для добавления двух списков.Как сделать этот код хвостом рекурсивным?
fun {AppendLists L1 L2}
if L1 == nil then L2
else
L1.1 | {AppendLists L1.2 L2}
end
end
Этот код уже является хвостовым рекурсивным. У вас есть рекурсия как последнее утверждение, поэтому сначала вы вычисляете результат, а затем вызываете рекурсию.
Если вы не видите, почему ваш код уже хвост-рекурсивный, вот тот же код с немного менее синтаксическим сахаром. Ваша функция была преобразована в процедуру с дополнительным аргументом для сохранения результата (это обозначается факультативным «?»).
proc {AppendLists L1 L2 ?R}
if L1 == nil then L2
else K in
R = L1.1 | K
{AppendLists L1 L2 K}
end
end