Changed name: https://github.com/rplevy/funcycle/blob/master/src/fun/cycle.clj
On Fri, Nov 14, 2014 at 12:49 AM, Robert Levy <r.p.l...@gmail.com> wrote: > 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.