Erlang获取错误**1:语法错误之前:' - >'**

pra*_*jal 15 erlang

我已经开始在Erlang中进行一些实践了,我得到了:** 1: syntax error before: '->' **每当我宣布任何功能时,例如.计算列表的总和(这是实验性的,cource有内置函数用于查找列表的总和).

sum([]) -> 0;
sum([H | T]) -> H + sum(T).
Run Code Online (Sandbox Code Playgroud)

在erl shell(v 5.5.5)中.

提前致谢

Dan*_*una 38

您无法使用与erl文件中相同的语法在shell中定义函数.

你可以定义乐趣.

shell中的语法必须是:

Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end,
Sum([1,2,3], Sum).
Run Code Online (Sandbox Code Playgroud)

请注意,递归匿名函数(这是)以丑陋的方式定义.你基本上必须将函数作为参数传递给自己.

  • 又名:想要shell中的函数?玩得开心! (5认同)
  • 我希望错误消息更有帮助. (4认同)

rvi*_*ing 9

直接的答案是,在模块定义文件中,您具有属性,例如-module().,-export().等等,以及函数定义,而在shell中,您可以输入要评估的表达式.函数定义不是表达式.

如果你想在shell中定义一个本地的临时函数,你需要使用fun,如@DanielLuna所示.这些是非匿名的匿名函数,因此递归调用它们是一种痛苦,它不是Erlang特有的,而是所有匿名函数共有的.

NB

Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end.
Run Code Online (Sandbox Code Playgroud)

在shell中没有定义一个被调用的函数,Sum但定义了一个匿名函数并将变量 绑定Sum到它.

这也是为什么在模块中唯一能做的就是定义函数而不是在加载模块时要计算的表达式.