Прямой ответ заключается в том, что в файле определения модуля у вас есть атрибуты, такие как -module().
, -export().
и т. Д., И определения функций, а в оболочке вы вводите выражения для оценки.Определение функции не является выражением.
Если вы хотите определить локальную временную функцию в оболочке, вам нужно использовать fun, как показано @DanielLuna.Это действительно анонимные безымянные функции, поэтому рекурсивный вызов себя - это боль, которая не характерна для Erlang, но общая для всех анонимных функций.
NB
Sum = fun([], _) -> 0; ([H | T], F) -> H + F(T, F) end.
в оболочке НЕ определяет функцию с именем Sum
, но определяет анонимную функцию и привязывает к ней переменную Sum
.
По этой же причине единственное, что вы можете сделать в модулеэто определение функций, а не выражений, которые будут оцениваться при загрузке модуля.