Erlang getting error ** 1: syntax error before: '->' **

前端 未结 3 884
轻奢々
轻奢々 2021-02-07 05:59

I have started some hands on in Erlang and I am getting : ** 1: syntax error before: \'->\' ** whenever i am declaring any function for eg. to calculate sum of a

相关标签:
3条回答
  • 2021-02-07 06:09

    The straight answer is that in a module definition file you have attributes, like -module()., -export(). etc, and function definitions, while in the shell you enter expressions to be evaluated. A function definition is not an expression.

    If you want to define a local, temporary function in the shell you need to use fun's as @DanielLuna has shown. These are really anonymous unnamed functions so calling themselves recursively is a pain, which is not specific to Erlang but common to all anonymous functions.

    N.B.

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

    in shell does NOT define a function called Sum but defines an anonymous function and binds the variable Sum to it.

    This is also why the only thing you can do in a module is define functions and not expressions to be evaluated when the module is loaded.

    0 讨论(0)
  • 2021-02-07 06:26

    Or use the lists:foldl/2 function. This is copied directly from the Erlang Reference Manual.

    1> lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).
    15
    
    0 讨论(0)
  • 2021-02-07 06:33

    You can't define functions in the shell using the same syntax as in an erl file.

    You can define fun's though.

    Syntax in the shell needs to be:

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

    Note that recursive anonymous functions (which this is) are defined in an ugly way. You basically have to pass the function as an argument to itself.

    0 讨论(0)
提交回复
热议问题