This is pretty trivial, but it is maybe sometimes more natural to express something as a cycling pattern of function applications over some data than as one constant function. The typical way of expressing those cases involves twisting it around so that the data is rotated/alternated instead of what you want which is a rotating sequence of functions in your map or reduce. I'm guessing something this has come up before on this list.
https://github.com/rplevy/reducycle/blob/master/src/red/ucycle.clj On Thu, Nov 13, 2014 at 11:10 PM, Robert Levy <r.p.l...@gmail.com> wrote: > I was just thinking about this some more. Here's a slightly less terrible > idea: > > (defn rotate [coll] > (rest (take (inc (count coll)) > (cycle coll)))) > > (defn reducycle [fns init coll] > (let [fns-atom (atom fns) > alt-op (fn [& args] > (swap! fns-atom rotate) > (apply (first @fns-atom) args))] > (reduce alt-op init coll))) > > (reducycle [- +] 0 (range 1 10)) > > On Thu, Nov 13, 2014 at 10:30 PM, Robert Levy <r.p.l...@gmail.com> wrote: > >> sorry, make that >> >> (*reduce alt-op *(*range 1 10)*) >> >> On Thu, Nov 13, 2014 at 10:28 PM, Robert Levy <r.p.l...@gmail.com> wrote: >> >>> (let [op (atom +)] >>> (defn alt-op [a b] >>> ((swap! op #(if (= % +) - +)) a b))) >>> >>> (map alt-op (range 1 10)) >>> >>> On Thu, Nov 13, 2014 at 10:09 PM, Robert Levy <r.p.l...@gmail.com> >>> wrote: >>> >>>> But for "applyv" you could do this: >>>> >>>> (*reduce + *(*map *(*comp eval list*) (*cycle *[*+ -*]) (*range 1 10*)) >>>> ) >>>> >>>> On Thu, Nov 13, 2014 at 10:06 PM, Robert Levy <r.p.l...@gmail.com> >>>> wrote: >>>> >>>>> Is that any more elegant than Dave's (reduce + (map * (cycle [1 -1]) >>>>> (range 1 n))) though? I would say that's the best actually sensible >>>>> answer proposed in this thread. >>>>> >>>>> On Thu, Nov 13, 2014 at 9:54 PM, Andy L <core.as...@gmail.com> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Thu, Nov 13, 2014 at 7:23 PM, Robert Levy <r.p.l...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> You don't need this for numbers over 900 right? >>>>>>> >>>>>>> >>>>>> I see what you mean. But no, I just practice and try to capture >>>>>> patterns. So, going after your example I got following: >>>>>> >>>>>> (reduce + (map applyv (cycle [+ -]) (range 1 10))) >>>>>> >>>>>> where something like applyv perhaps exists, >>>>>> (defn applyv [f a] (f v)) - but I am not sure how to find it. >>>>>> >>>>>> A. >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 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. >>>>>> >>>>> >>>>> >>>> >>> >> > -- 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.