Elixir是否支持类似于Clojure的命名匿名函数? 例如,我想做这样的事情:
fib_fun = fn fib n -> if n <= 1 do 1 else fib(n - 1) + fib(n - 2) end end
这样我就可以递归调用匿名函数。
答案 0 :(得分:7)
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