可以在Erlang shell中定义递归函数吗?

可以在Erlang shell中定义递归函数吗?,erlang,erlang-shell,Erlang,Erlang Shell,当我在Erlang REPL中键入以下内容时,我正在阅读编程Erlang: perms([]) -> [[]]; perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])]. * 1: syntax error before: '->' perms([])->[[]]; perms(L)->[[H | T]| H perms=fun([])->[[[]];(L)->[[H | T]| H,因为有命名的fun: FUN现在可

当我在Erlang REPL中键入以下内容时,我正在阅读编程Erlang:

perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
* 1: syntax error before: '->'
perms([])->[[]];
perms(L)->[[H | T]| H perms=fun([])->[[[]];(L)->[[H | T]| H,因为有命名的fun:

  • FUN现在可以命名了
详情请参阅:

OTP-11537 Funs现在可以被命名了。多亏了Richard O'Keefe
对于想法(EEP37)和Anthony Ramine的
实施
1>Perms=funf([])->[[]];
F(L)->[H|T]| H Perms=fun(列表)->
G=乐趣(,[])->[[]];

(F,L)->[[H | T]| H的可能重复,因此在erlang shell中无法定义递归函数,对吗?
F=fun F([X | Xs])->[do_something(X)| F(Xs)]结束。
然后将其称为
F(YourXList).
请参见。@SteveVinoski这不是重复的,因为这是关于递归函数的。我应该投票关闭它,因为它重复了,而不是我选择的第一个,但不幸的是,我现在无法更改它。但问题是,我只花了几秒钟的时间搜索网站就找到了答案,而OP显然没有尝试这样做这个问题的答案比下面的答案更完整。
2> Perms = fun([]) -> [[]];(L) -> [[H|T] || H <- L, T <- Perms(L--[H])] end.
* 1: variable 'Perms' is unbound