2011-05-15 14 views
7

Si defino una función que devuelve una función como esta:Calling Clojure funciones de orden superior

(defn add-n 
    [n] 
    (fn [x] (+ x n))) 

Entonces puede asignar el resultado a un símbolo:

(def add-1 (add-n 1)) 

y llamarlo:

(add-1 41) 
;=> 42 

¿Cómo llamo al resultado de (add-n 1) sin asignarlo a un nuevo símbolo? El siguiente produce esta salida:

(println (add-n 1)) 
#<user$add_n$fn__33 [email protected]> 
nil 

El #<user$add_n$fn__33 [email protected]> es una referencia interna a la función generada.

Respuesta

16

Fácil:

(println ((add-n 1) 41)) 

La salida que viste es una definición de función. Ponerlo entre corchetes y agregar un parámetro es suficiente para llamarlo.

Cuestiones relacionadas