Erlang:为什么这会以'badarith'异常失败?

时间:2009-09-19 22:42:40

标签: erlang closures

是否可以在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

3 个答案:

答案 0 :(得分:25)

你不能添加原子。变量从erlang中的Capital Letters开始。以小写字母开头的单词是atoms。

换句话说,您的问题根本与fun无关,您只需要将变量名称大写。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

变量以erlang中的大写字母开头。 以小写字母开头的单词是atoms。