macros clojure

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)))