2010-03-29 12 views
13

Son los corchetes en torno a los argumentos en Clojure defn, defmacro y binding (¿me olvido de algunos?) Realmente crear un vector o es simplemente una cuestión de sintaxis, por lo que los argumentos se destacan del resto?¿Los corchetes en definición, defmacro y unión de Clojure son realmente un vector?

estoy leyendo Clojure en Acción que establece:

Clojure utiliza para denotar vectores argumentos de la función o formas de unión.

que me hizo hacer esta pregunta aquí.

Respuesta

20

Sí, es realmente un vector. Podemos ver que al crear una función manualmente y luego evaluarla:

(eval (list (list 'fn (vector 'x) (list '* 'x 2)) 100)) 
;=> 200 

Hope that helps.

+0

Genial, gracias :) –

+0

Sin embargo, una pregunta (después de dos años y medio ...), ¿por qué no se acepta esto? (defn foo (vector 'x' y) (+ x y)) –

+1

La forma 'defn' es una macro, por lo que en el momento de su examen (tiempo de expansión de macro) no se ha evaluado nada. Entonces, cuando mira la forma de enlace, espera un vector, pero en su lugar ve una lista '(vector (quote x) (quote y))'. – fogus

Cuestiones relacionadas