使用或者返回乙個匿名函式的函式被稱為高階函式(higer-order function)。普通的函式,它們遞迴是容易編寫的,因為它們有個名字,你引用這個名字就可以了,而匿名函式沒有名字,如何編寫遞迴呢?
例子:下面是乙個計算乙個list的累加和的匿名函式:
f = fun(this, , total) -> total;
(this, [h|t], total) -> this(this, t, h+total) end.
在erl的shell中輸入:
1> f = fun(this, , total) -> total;
1> (this, [h|t], total) -> this(this, t, h+total) end.
#fun
2> f(f, [1,2,3], 0).
6訣竅就是把匿名函式賦給f,然後在呼叫這個匿名函式時,把f作為引數傳入進去。你可能會問,為什麼在匿名函式裡面無法使用符號f?那是因為定義這個函式時,f還不存在。
如果你覺的上面的函式還需要你知道如何呼叫遞迴的匿名函式,不是很方便,不妨多寫一層,我在shell裡輸入:
1> g=fun(l) ->
1> f=fun(this, , total) -> total;
1> (this, [h|t], total) -> this(this, t, h+total) end,
1> f(f, l, 0) end.
#fun2> g([1,2,3]).
63>
Erlang高階函式 遞迴
說明 erlang 高階函式 匿名函式 有一大堆資料,不再贅述,這裡主要說以下高階函式遞迴式。高階函式遞迴用法 高階函式實現尾遞迴有兩種方式 1 將高階函式自身作為引數傳入,並在內部呼叫 2 通過fun進行類似普通函式的定義 1 作為引數傳入 參考資料 erlang匿名函式的遞迴 寫普通函式的時候函...
Erlang 九 遞迴函式
詳解假設 函式a 是個遞迴函式,當我們在外部呼叫 函式a 時,在函式a在滿足條件的情況下會一直自己呼叫自己 簡單的說 函式自己呼叫自己 我們在超市買了一些東西,當去櫃檯結賬時,通過呼叫模組的函式 計算出商品的總 items 結賬模組 price.erl module price export 單個商...
匿名函式遞迴
lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...