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函数(全局变量,局部变量,作用域,递归函数,高阶函数,匿名函数)
python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))