Эрланг: Почему это происходит с исключением "badarith"?

Можно ли реализовать закрытие в Erlang?

Например, как я мог бы перевести этот фрагмент из Scheme?

(define (make-adder n)
  (lamdba (x) (+ x n)))

Я пробовал следующее, но я явно что-то пропустил.

make_adder(n) ->
    fun (x) -> x + n end.

При компиляции это дает ошибку

Warning: this expression will fail with a 'badarith' exception

Ответы

Ответ 1

Вы не можете добавлять атомы. Переменные начинаются с букв "Капитал" в erlang. слова, начинающиеся с букв в нижнем регистре, являются атомами.

Другими словами, ваша проблема не связана с fun вообще, вам просто нужно загладить ваши имена переменных.

Ответ 2

make_adder(N) ->
  fun (X) -> X + N end.

Ответ 3

Переменные начинаются с Капитальных писем в erlang. слова, начинающиеся с букв в нижнем регистре, являются атомами.