Erlang匿名函式及函式的高階應用

2021-08-09 18:36:40 字數 1478 閱讀 7991

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 匿名函式舉例 用匿名函式有個好處,因為函式沒有名字,不必...