2009-09-19 13 views
15

¿Es posible implementar un cierre en Erlang?Erlang: ¿Por qué falla esto con una excepción 'badarith'?

Por ejemplo, ¿cómo traduciría este fragmento de Scheme?

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

He intentado lo siguiente, pero claramente me falta algo.

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

Compilación esto da el error

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

Chicos, ¿por qué esto está votando? ¡Estoy avergonzado de cuán mala es mi pregunta! – grifaton

Respuesta

25

No se puede agregar átomos. Las variables comienzan con Mayúsculas en erlang. las palabras que comienzan con letras minúsculas son átomos.

En otras palabras, su problema no está relacionado con fun en absoluto, solo tiene que poner en mayúscula los nombres de sus variables.

+0

Gracias! ¡Borro la pregunta y me voy a la cama! – grifaton

+1

No se puede eliminar la pregunta ... simplemente ir a la cama. – grifaton

+1

Deje la pregunta y cambie el título a '¿Por qué me sale?'; Esta expresión fallará con una excepción 'badarith' ". O algo por el estilo. De esta forma, todos los demás principiantes erlang que cometerán este error (sé que lo hice) lo encontrarán fácilmente al buscar el mensaje. – sepp2k

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

variables comienzan con letras mayúsculas en Erlang. palabras que comienzan con letras minúsculas son átomos.

Cuestiones relacionadas