La respuesta directa es que en un archivo de definición de módulo tiene atributos, como -module().
, -export().
etc., y definiciones de funciones, mientras que en el intérprete de comandos ingresa expresiones para evaluar. Una definición de función no es una expresión.
Si desea definir una función local temporal en el shell, debe usar fun como se muestra @DanielLuna. Estas son funciones realmente anónimas sin nombre, por lo que llamarse recursivamente es una molestia, que no es específica de Erlang sino que es común a todas las funciones anónimas.
N.B.
Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end.
en shell no NO definir una función llamada Sum
pero define una función anónima y se une al variable deSum
a ella.
Por esta razón, lo único que puede hacer en un módulo es definir funciones y no expresiones para evaluar cuando se carga el módulo.
o alias: want functions in shell? ¡Que te diviertas! –
Ojalá el mensaje de error fuera más útil. – dotslash