gpt4 book ai didi

Elixir:条件语句中的尾调用优化递归

转载 作者:行者123 更新时间:2023-12-05 03:19:42 32 4
gpt4 key购买 nike

我下面的函数会在 Elixir 中进行尾调用优化吗?

def poller(func, args, interval) do
case apply(func, args) do
:done -> :done
:try_again ->
:timer.sleep(interval)
poller(func, args, interval)
end
end

从我在初学者文献中读到的内容来看,优化仅适用于递归调用是函数执行的“最后一件事”。

这在其他条件中是如何工作的?例如如果我的递归调用是 if 中的最后一件事,但之后有一个 else block 怎么办?

最佳答案

是的,您的示例是有效的尾递归。将尾递归与条件一起使用实际上是一种非常常见的模式,在大多数情况下甚至是必要的,除非你想要一个无限循环。

这是一个 example来自标准库 (List.zip/1)。

这里是 another one (List.pop_at/3):注意没有case表达式,但是多子句函数实际上是translated as case在编译到核心 erlang 期间。这实际上是一回事。

ifcond 是相同的,因为它们也被翻译为 case。重要的一点是递归调用只能作为每个条件分支的最后一件事来调用。

关于Elixir:条件语句中的尾调用优化递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73378588/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com