Эрланг: Почему это терпит неудачу с исключением «бадарит»? - PullRequest
15 голосов
/ 20 сентября 2009

Возможно ли реализовать замыкание в Эрланге?

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

(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

Ответы [ 3 ]

25 голосов
/ 20 сентября 2009

Вы не можете добавлять атомы. Переменные начинаются с заглавных букв в эрланге. слова, начинающиеся с строчных букв, являются атомами.

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

3 голосов
/ 20 сентября 2009
make_adder(N) ->
  fun (X) -> X + N end.
0 голосов
/ 05 января 2018

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

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