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 list (this is experimental, of cource there is Built In Function for find sum of a list).
sum([]) -> 0;
sum([H | T]) -> H + sum(T).
in erl shell (v 5.5.5).
Thanks in advance
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With