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.

Reply via email to