4
ElixirはClojureと同様の匿名関数をサポートしていますか?私は再帰的に無名関数を呼び出すことができるようにElixirの名前付き匿名関数
fib_fun = fn fib n -> if n <= 1 do 1 else fib(n - 1) + fib(n - 2) end end
: は例えば、私はこのような何かをしたいです。
ElixirはClojureと同様の匿名関数をサポートしていますか?私は再帰的に無名関数を呼び出すことができるようにElixirの名前付き匿名関数
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