2017-06-30 18 views
4

ElixirはClojureと同様の匿名関数をサポートしていますか?私は再帰的に無名関数を呼び出すことができるようにElixirの名前付き匿名関数

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

: は例えば、私はこのような何かをしたいです。

答えて

6

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 
関連する問題