Pregunta ¿Qué significa "% &" en Clojure?


Resolví el 58º Problema 4clojure usando recursion pero luego miré la solución de otra persona y encontré esto:

(fn [& fs] (reduce (fn [f g] #(f (apply g %&))) fs))

Que es más elegante que mi solución. Pero no entiendo qué %& ¿medio? (Yo entiendo que % significa, pero no cuando se combina con &) ¿Alguien podría arrojar algo de luz sobre esto?


9
2017-08-23 09:48


origen


Respuestas:


Significa los "argumentos de descanso", según esta fuente.

Los argumentos en el cuerpo están determinados por la presencia de argumentos   literales tomando la forma%,% n o% &. % es un sinónimo de% 1,% n   designa el enésimo arg (basado en 1), y% & designa un resto arg.

Tenga en cuenta que & la sintaxis es una reminiscencia de la & more argumentos en los parámetros de función (mira aquí), pero &% trabaja dentro de una taquigrafía anónima función.

Cierto código para comparar funciones anónimas y su equivalente anónimo de función anónima:

;; a fixed number of arguments (three in this case)
(#(println %1 %2 %3) 1 2 3)
((fn [a b c] (println a b c)) 1 2 3)

;; the result will be :
;;=>1 2 3
;;=>nil

;; a variable number of arguments (three or more in this case) :
((fn [a b c & more] (println a b c more)) 1 2 3 4 5)
(#(println %1 %2 %3 %&) 1 2 3 4 5)

;; the result will be :
;;=>1 2 3 (4 5)
;;=>nil

Tenga en cuenta que & more o %& la sintaxis proporciona una lista del resto de los argumentos.


10
2017-08-23 09:51



Preguntas populares