On Dec 15, 4:05 pm, Laurent PETIT <
laurent.pe...@gmail.com> wrote:
> Hello,
>
> it seems to me that your example is unnecessary complicated.
> Let's refactor it a bit before trying to obtain your goal.
>
> First,
>
> your example can be, for the purpose of your goal, simplified as :
>
> (loop [a a0]
> (if (predicate-fn a)
> (return-fn a)
> (recur (recur-fn a))))
>
> So now, what can we do with this ?
>
> you keep applying function recur-fn to a, starting with a = a0.
> This is a job for iterate : (iterate recur-fn a0) will create this lazy
> sequence starting with a0, and where each new value is made from (recur-fn
> a)
>
> Then you want to stop when predicate-fn returns true.
> This is a job for remove, for example : (first (remove (comp not
> predicate-fn) (iterate recur-fn a0)))
>
> The final step is to apply return-fn to the result:
> (return-fn
> (first (remove
> (comp not predicate-fn)
> (iterate recur-fn a0)))
>
Shouldn't this be:
(return-fn
(first (filter predicate-fn (iterate recur-fn a0)))
> As for return-fn, predicate-fn and recur-fn :
>
> (def b f1)
> (def c (comp f2 b))
> (def d (comp f3 c))
> (def e (comp f4 d))
> (def g (comp f5 c))
> (def h (comp f5 f2))
>
> (def return-fn e)
> (def predicate-fn #(if (or (f6? (b %)) (<= (g %) (h %))))
> (def recur-fn #(f7 (d a) (b a)))
>
> Is it something like that you expected ?
>
> 2009/12/15 samppi <
rbysam...@gmail.com>
>
> > I'm trying to rewrite a loop to use higher-level functions instead.
> > For pure functions f1, f2, f3, f4, f5, f6?, and f7, and a Clojure
> > object a0, how can one rewrite the following loop to use map, reduce,
> > etc.?
>
> > (loop [a a0]
> > (let [b (f1 a)
> > c (f2 b)
> > d (f3 c)
> > e (f4 d)
> > g (f5 c)
> > h (-> e f2 f5)]
> > (if (or (f6? b) (<= g h))
> > e
> > (recur (f7 d b)))))
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to
clo...@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+u...@googlegroups.com<
clojure%2Bunsu...@googlegroups.com>