我怎样才能使这段代码尾部递归?
How can I make this code tail recursive?
以下代码用于附加两个列表。
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
以下代码用于附加两个列表。
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