Ciò avidamente consumare tutta la ss, chiamando tutte le funzioni per gli effetti collaterali e la restituzione qualunque sia l'ultimo ritorna:
(reduce #(%2) nil [#(println :foo) #(println :bar)])
; => prints :foo, then :bar, then returns nil
Se si desidera tenere sui valori di ritorno, è possibile utilizzare reductions
invece:
(reductions #(%2) nil [#(println :foo) #(println :bar)])
; => prints :foo, then :bar, then returns (nil nil)
reductions
si trova in clojure.contrib.seq-utils
in Clojure 1.1 e in clojure.core
nelle istantanee attuali di 1.2.
Aggiornamento: noti che reductions
restituisce un ss pigro, quindi non c'è miglioramento rispetto map
(. NB in map
che ci si vuole utilizzare #(%)
piuttosto che #(%2)
). L'ho menzionato qui principalmente per completezza. In effetti, ho pubblicato l'intera risposta per completezza, perché normalmente andavo con l'approccio doseq
(vedi la risposta di Brian).
fonte
2010-06-21 23:58:18
Grande, che ha funzionato . Molte grazie! –