To będzie chętnie spożywają całą nast, nazywając wszystkie funkcje efektów ubocznych i powrocie co ostatni powraca:
(reduce #(%2) nil [#(println :foo) #(println :bar)])
; => prints :foo, then :bar, then returns nil
Jeśli chcesz trzymać obie wartości, można użyć reductions
zamiast:
(reductions #(%2) nil [#(println :foo) #(println :bar)])
; => prints :foo, then :bar, then returns (nil nil)
reductions
znajduje się w clojure.contrib.seq-utils
w Clojure 1.1 oraz w clojure.core
w bieżących migawkach wersji 1.2.
Aktualizacja: Zauważ, że reductions
zwraca leniwe nast, więc to nie jest postęp w stosunku map
(. NB w map
którą chcesz użyć #(%)
zamiast #(%2)
). Wspominałem o tym głównie dla kompletności. W rzeczywistości, napisałem całą odpowiedź dla kompletności, ponieważ zwykle podążałem za podejściem doseq
(patrz odpowiedź Briana).
Wielkiego, który pracował . Wielkie dzięki! –