Hi Alex, Completing is exactly what I used to solve this, but It felt like a bit of a hack/work around.
I think this is a case of being pragmatic, having the reason reaffirmed makes it feel less like a work around and more of a choice in behaviour. Thanks Mark On Monday, January 25, 2016 at 3:22:26 PM UTC, Alex Miller wrote: > > I think you've explained it well. You can use > https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/completing > > to patch in a better completion arity for - (here I think identity is what > you want and that is the default for completing): > > (transduce xf (completing -) 0 (range 10)) > > > > > On Monday, January 25, 2016 at 7:12:42 AM UTC-6, Mark Tinsley wrote: >> >> Hi all, >> >> Could I have some clarification on something, I know how to solve the >> issue I just want to make sure I understand the reasons behind it, given >> the following: >> >> (def xf >> (comp >> (filter odd?) >> (map inc) >> (take 5))) >> >> >> (transduce xf + 0 (range 10)) >> >> I get the answer: => 30 >> >> Makes sense, now if I do this: >> >> (transduce xf - 0 (range 10)) >> >> I get the answer.... => 30 >> >> But... >> >> (reduce - 0 (eduction xf (range 10))) >> >> gives => -30 >> >> I can see why this is, looking at >> https://github.com/clojure/clojure/blob/010864f8ed828f8d261807b7345f1a539c5b20df/src/clj/clojure/core.clj#L6587 >> >> the binding ret in the let has the reduced value. This is then passed to >> the reducers arity-1 function, which preforms something equivalent to the >> following (- -30) to give 30. >> >> The reason for the arity-1 function is to complete/cleanup state as seen >> in the partition-all function >> https://github.com/clojure/clojure/blob/010864f8ed828f8d261807b7345f1a539c5b20df/src/clj/clojure/core.clj#L6954 >> >> As '-' historically had an arity-1 function we cannot update the >> behaviour, this may well be the case for other functions. >> >> Am I right in the above or am I missing something? >> >> Thanks, >> >> Mark >> >> >> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
