Andreas, there's no such function in Clojure core, and I'm fairly sure
there's not one in contrib.

Stop reading if you don't want to see my version; it was a fun little
puzzle.

(defn take-while-reduction [f pred coll]
  (let [rf (juxt #(reductions f %) identity)]
    (->> coll rf (apply map vector) (take-while #(-> % first pred))
(map second))))

On Aug 7, 1:44 pm, Andreas Liljeqvist <bon...@gmail.com> wrote:
> Thanks that works.
>
> What I really want is a function like in my initial posting.
> Is there something like that in core or contrib?
>
> Your example code can be quite slow since all sublists are summed before
> comparision.
> I would like a function that does this with a accumulator for the reduced
> values.
>
> I am not asking somebody to write this for me - I just want to know if it
> exists
>
> btw: take-until isn't a bad name
>
> 2010/8/7 Steve Purcell <st...@sanityinc.com>
>
>
>
> > Oh, right, so maybe:
>
> > (last (take-while #(< (apply + %) 100) (reductions conj [] (iterate inc
> > 0))))
> > => [0 1 2 3 4 5 6 7 8 9 10 11 12 13]
>
> > -Steve
>
> > On 7 Aug 2010, at 13:57, Andreas Liljeqvist wrote:
>
> > It should use "+" for reducing the taken list.
> > Behind the scenes I would envision some accumulator passed to pred.
> > This examples takes elements while their total sum is less than 100.
>
> > 2010/8/7 Steve Purcell <st...@sanityinc.com>
>
> >> On 7 Aug 2010, at 11:15, bonega wrote:
>
> >> > Hi.
>
> >> > Are there some function like this:
>
> >> > (defn take-while2 [f pred coll] ...
>
> >> > usage: (take-while2 + #(< % 100) (iterate inc 0))
> >> > returns: (0 1 2 3 4 5 6 7 8 9 10 11 12 13)
>
> >> I'm feeling a bit stupid because I can't see from the above example how
> >> take-while2 is supposed to work. Can you clarify please?
>
> >> -Steve
>
> >> --
> >> 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
>
> >  --
> > 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