Erlang匿名函数及函数的高阶应用

Posted IT萌新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Erlang匿名函数及函数的高阶应用相关的知识,希望对你有一定的参考价值。

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匿名函数及函数的高阶应用的主要内容,如果未能解决你的问题,请参考以下文章

python基础之推导式及匿名函数和高阶函数

Scala基础:作为值的函数及匿名函数柯里化闭包及控制抽象

python函数(全局变量,局部变量,作用域,递归函数,高阶函数,匿名函数)

函数02匿名函数生成器高阶函数

python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

函数(匿名函数,嵌套函数,高阶函数,装饰器)