Anidamiento de#/% en macros de clojure
(2)
La anidación de funciones anónimas no se admite en clojure.
Editar: Por "funciones anónimas" quise decir #(...)
, not (fn ...)
. Disculpas por la confusión.
Sé que nesting #,% es malo; sin embargo, a menudo me encuentro escribiendo funciones cortas anónimas en línea que terminan teniendo exactamente 2 niveles de # /%.
Por lo tanto, tengo curiosidad, ¿hay alguna manera de decirle a Clojure algo en donde cada% está vinculado al # más cercano (el más pequeño) #?
¡Gracias!
Tener funciones anónimas anidadas está perfectamente bien. Solo tienes que usar la sintaxis no abreviada.
#(foo (bar %1)
(baz %2))
es equivalente a
(fn [x y]
(foo (bar x)
(bax y)))
La variante completa se puede anidar arbitrariamente. Además, si tiende a utilizar el map
con mucho fn
, considere usar for
lugar (que tienden a parecer más claros en mi opinión):
(map (fn [row]
(map (fn [col]
(+ (* 10 row) col))
(range 3)))
(range 3))
hace lo mismo que
(for [row (range 3)]
(for [col (range 3)]
(+ (* 10 row) col)))