Of course you're right. I couldn't remember filter, was somehow "stuck" with
some which does not do the job of course, and playing with the doc did not
help since my version of clojure still has the bug on filter's lack of
documentation :-)

2009/12/15 Sean Devlin <francoisdev...@gmail.com>

> 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 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<clojure%2bunsubscr...@googlegroups.com>
> <clojure%2bunsubscr...@googlegroups.com<clojure%252bunsubscr...@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 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<clojure%2bunsubscr...@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 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

Reply via email to