gpt4 book ai didi

elixir - Elixir 中的命名匿名函数

转载 作者:行者123 更新时间:2023-12-04 18:01:59 30 4
gpt4 key购买 nike

Elixir 是否支持类似于 Clojure 的命名匿名函数?
例如,我想做这样的事情:

fib_fun = fn fib n -> if n <= 1 do 1 else fib(n - 1) + fib(n - 2) end end

这样我就可以递归地调用匿名函数。

最佳答案

Elixir doesn't support recursion in anonymous functions ,但您可以使用 guard clauses 将其实现为 Y-Combinator像这样:

fib = fn x ->
fun = fn
(n, _) when n <= 1 -> 1
(n, fun) -> fun.(n-1, fun) + fun.(n-2, fun)
end

fun.(x, fun)
end

并像往常一样调用它:
fib.(5)
#=> 8

所以最好把它写成模块内的普通方法(看起来也更干净):
defmodule Fibonacci do
def get(n) when n <= 1, do: 1
def get(n), do: get(n-1) + get(n-2)
end

关于elixir - Elixir 中的命名匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44837662/

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