Touching the accumulator (the result in your case) from within a
transducing function is a bit of an anti-pattern. The whole point of
transducers is that you can swap out the accumulator:

(transduce (map inc) conj [] (range 10))
(transduce (map inc) async/>! some-channel (range 10))
(transduce (map inc) + 0 (range 10))

In this example, we loose that ability to swap out the result type if `(map
inc)` assumes that the accumulator will always be a vector, or a integer.
This is why I said map/filter/keep should handle most of your cases.

If the function you are writing doesn't require the accumulator to function
properly, then there is no reason why `(map my-fn)` won't work.

On Sat, Jun 11, 2016 at 12:13 AM, Travis Daudelin <travis.daude...@gmail.com
> wrote:

> On Friday, June 10, 2016 at 3:03:38 PM UTC-7, Francis Avila wrote:
>>
>> A higher-order function can do what this macro does:
>> https://gist.github.com/favila/ecdd031e22426b93a78f
>>
>
> Oh nice! It looks like I came up with an almost identical solution:
> (defn transducing
>   [f]
>   (fn [reducing-fn]
>     (fn
>       ([] (reducing-fn))
>       ([result] (reducing-fn result))
>       ([result input] (f result input reducing-fn)))))
>
> It feels like "writing a custom transducer" should be a common use case,
> is there anything like these functions we've written that exists in the
> core library? I didn't see anything like them there or in the reducers
> library when I first started on my project.
>
> --
> 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.
>



-- 
“One of the main causes of the fall of the Roman Empire was that–lacking
zero–they had no way to indicate successful termination of their C
programs.”
(Robert Firth)

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

Reply via email to