Erlang匿名函数的递归

使用或者返回一个匿名函数的函数被称为高阶函数(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>

猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/87076445