La risposta diretta è che in un file di definizione del modulo si hanno attributi, come -module().
, -export().
ecc. E le definizioni di funzione, mentre nella shell si immettono espressioni da valutare. Una definizione di funzione non è un'espressione.
Se si desidera definire una funzione locale temporanea nella shell, è necessario utilizzare fun's come @DanielLuna ha mostrato. Queste sono funzioni anonime anonime, quindi chiamarsi ricorsivamente è un dolore, che non è specifico di Erlang ma comune a tutte le funzioni anonime.
N.B.
Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end.
in guscio fa NON definire una funzione denominata Sum
ma definisce una funzione anonima e lega il variabileSum
ad esso.
Questo è anche il motivo per cui l'unica cosa che si può fare in un modulo è definire funzioni e non espressioni da valutare quando il modulo viene caricato.
aka: desidera funzioni in shell? Divertiti! –
Vorrei che il messaggio di errore fosse più utile. – dotslash