`completing` exists for exactly this purpose. :) On Tuesday, January 26, 2016 at 1:22:30 AM UTC-6, Mark Tinsley wrote: > > 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 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.