I think group-by can do what you want (and more); http://clojuredocs.org/clojure_core/clojure.core/group-by
Jonathan On Thu, Apr 4, 2013 at 2:16 PM, Christian Romney <[email protected]> wrote: > Hi all, > > I was wondering if something in core (or new contrib) like this exists > already... > > (defn segregate > "Takes a predicate, p, and a collection, coll, and separates the items in > coll > into matching and non-matching subsets. Like Scheme or Ruby's partition." > [p coll] > (loop [s coll y [] n []] > (if (empty? s) [y n] > (if (p (first s)) > (recur (rest s) (conj y (first s)) n) > (recur (rest s) y (conj n (first s))))))) > > > (let [[odds evens] (segregate odd? (range 1 11))] > (println evens)) > > In Scheme (and Ruby) this function is partition, which is quite different > from /partition(-all|-by)?/ in Clojure: > > #lang racket > > (let-values [[(odds evens) (partition odd? (range 1 11))]] > (display evens)) > > If not, I have two follow-up questions. > > 1) Is there a better way to write segregate > 2) Is this useful enough to consider adding to core? > > TIA, and my apologies for the newbie question. :) > > (Gist version if you prefer: https://gist.github.com/xmlblog/5309853) > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > 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 [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
