erlang 作為一種函式式程式語言,和其他的函式式程式語言一樣具有lambda函式,在erlang中也稱為匿名函式,同時函式也可以賦值給變數或作為引數進行傳遞,此處對erlang 中的匿名函式及級高階應用作簡要介紹。
一、匿名函式
erlang 中匿名函式在定義時使用fun作為函式的名稱,下圖為乙個基本的匿名函式的定義和使用:
圖中定義了乙個匿名函式,並將其賦值給變數double(函式式程式語言一般都可以實現),然後通過變數double來呼叫函式即可。
匿名函式也可以有多個子句,例如:
上圖中在互動式環境下定義了帶有二個子句的匿名函式,然後分別使用不同的引數呼叫兩次。注意:第二個子句不用寫fun名稱。
二、將函式作為函式的引數呼叫
在erlang中雖然不能將模組中的函式直接作為另乙個函式的引數,但可以通過匿名函式進行包裝後傳入另乙個函式來進行呼叫。
以下為lambfun模組的源**:
%filename:lambfun.erl
-module(lambfun).
-compile(export_all).
double(x) ->
x * 2.
triple(x) ->
x * 3.
call(funcall,x) ->
funcall(x).
下圖是在互動式環境下的執行結果:
在成功編譯之後,用匿名函式包括之後,分別賦值給f和f3變數,並通過call函式來呼叫實現了乘2和乘3操作。
三、返回函式的函式
使用匿名函式還可以實現讓函式返回的不是數值,而乙個函式,比如:
%filename highfun.erl
-module(highfun).
-compile(export_all).
multi(x,y) ->
x * y.
double(x) ->
fun(x) -> multi(2,x) end.
函式double返回的是乙個函式。在互動式環境下呼叫如下圖所示:
當呼叫highfun:double(5)函式時,返回的乙個函式,然後繫結到dbfun,之後再進行呼叫。
Erlang匿名函式的遞迴
使用或者返回乙個匿名函式的函式被稱為高階函式 higer order function 普通的函式,它們遞迴是容易編寫的,因為它們有個名字,你引用這個名字就可以了,而匿名函式沒有名字,如何編寫遞迴呢?例子 下面是乙個計算乙個list的累加和的匿名函式 f fun this,total total t...
匿名函式及內建函式
1.lamda匿名函式 a lambda x x x print a 6 不需要def宣告,一句話就可以宣告出來乙個函式 注意 1.函式的引數可以有多個,多個引數之間用逗號隔開 2.匿名函式不管多複雜,只能寫一行,邏輯結束後直接返回資料 2.sorted 排序函式 sorted iterable,k...
python基礎 匿名函式及遞迴函式
1 匿名函式語法 匿名函式lambda x x x實際上就是 deff x returnx x 關鍵字lambda表示匿名函式,冒號前面的x表示函式引數。匿名函式有個限制,就是只能有乙個表示式,不用寫return,返回值就是該表示式的結果。2 匿名函式舉例 用匿名函式有個好處,因為函式沒有名字,不必...