Este entusiasmo se consuma todo el SEC, llamando a todas las funciones de efectos secundarios y devolver cualquiera que sea el último regresa:
(reduce #(%2) nil [#(println :foo) #(println :bar)])
; => prints :foo, then :bar, then returns nil
Si desea aferrarse a los valores de retorno, se puede utilizar en lugar reductions
:
(reductions #(%2) nil [#(println :foo) #(println :bar)])
; => prints :foo, then :bar, then returns (nil nil)
reductions
se encuentra en clojure.contrib.seq-utils
en Clojure 1.1 y en clojure.core
en las instantáneas actuales de 1.2.
Actualización: Tenga en cuenta que devuelve un reductions
siguientes perezoso, por lo que no mejora con respecto a map
(. NB en map
que te gustaría utilizar en lugar de #(%)
#(%2)
). Lo mencioné aquí principalmente por completitud. De hecho, publiqué la respuesta completa para completarla, porque normalmente elegiría doseq
(ver la respuesta de Brian).
Grande, que trabajó . ¡Muchas gracias! –