[转]Erlang匿名函数的递归

来自:http://zfsgeek.blog.163.com/blog/static/20400908020121012104457436/

 

 

使用或者返回一个匿名函数的函数被称为高阶函数(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<erl_eval.18.82930912>
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.
#Fun<erl_eval.6.82930912>
2> G([1,2,3]).
6
3>

 

这里G引用的匿名函数内嵌一个匿名函数,内部是递归调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值