I'm trying to write a recursive fun in an Erlang shell, but I keep getting an unbound variable exception:
1> Foo = fun(X) -> Foo(X) end.
* 1: variable 'Foo' is unbound
This probably goes without saying, but I'm not trying to create an infinite loop! This is just a simple example of the error I'm getting.
5条答案
按热度按时间ar7v8xwq1#
自OTP 17.0起,存在命名函数:
在此之前,你可以用一个小的论证技巧来做到这一点:
这里的技巧是将函数作为参数发送给它自己,以允许递归。
一次拍摄的另一种方法:
例如:
xyhw6mcr2#
Erlang 17之后,您还可以使用"Funs with names"变体:
这样就更容易理解
F
是定义中的函数本身,而且Foo
和F
可以是同一个变量。zour9fqk3#
或者,您可以使用Y组合子。Y Combinator in Erlang说明。
eblbsuwk4#
我需要通过UDP快速发送一些数据包以进行测试,下面是我使用上面的示例完成此操作的方法:
yacmzcpb5#
显然,Foo只有在定义了fun之后才被赋值,因此不能从fun内部访问它。
我不认为Erlang允许从它自己调用匿名函数,只要把它命名就可以了。