Thank you! This was pretty much the answer I was hoping for. I actually found the ticket but was still baffled that it isn't currently possible.
keskiviikko 10. elokuuta 2016 17.07.40 UTC+3 Alex Miller kirjoitti: > > I think you're really talking about reductions, not reduce. In sequence > form, like: > > user=> (reductions + [0 1 2 3 4 5]) > (0 1 3 6 10 15) > > There is not currently a reductions transducer although there is a ticket > proposing to add one: http://dev.clojure.org/jira/browse/CLJ-1903 > > You don't have to wait for that of course, you could just use the > reductions transducer defined in that ticket. > > (require '[clojure.core.async :as a :refer [<!!]]) > > (defn reductions-with > ([f init] > (fn [rf] > (let [state (volatile! init)] > (fn > ([] (rf)) > ([result] (rf result)) > ([result input] > (if (reduced? @state) > @state > (rf result (unreduced (vswap! state f input)))))))))) > > ;; create the summarizing chan > (def ch (a/chan 1 (reductions-with + 0))) > > ;; in background thread pump numbers in > (future (a/onto-chan ch (range 6))) > > ;; drain results > (<!! (a/reduce conj [] ch)) > ;;=> [0 1 3 6 10 15] > > > > On Wednesday, August 10, 2016 at 8:26:39 AM UTC-5, JokkeB wrote: >> >> Hi, >> >> I'm wondering why reduce doesn't return a transducer like map does. For >> example I'd like to this: >> >> (async/chan 1 (reduce +)) >> >> I could use async/reduce but it doesn't provide a result before the >> source channel closes, I want to have a streaming result. >> >> What is the philosophy behind not having reduce return a transducer when >> no collection is passed to it? How should I go about doing a streaming >> stateful reducer, like in my example? >> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.