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