I'm reading the Sequences chapter of Programming Clojure, and Stu
points out that split-with combines the semantics of take-while and
drop-while. But is there a function that does something similar with
"filter"? Namely, rather than simply filtering the elements of a
collection that satisfy a predicate I also want to capture those that
don't. Something like this:
(defn filter-split [pred coll]
(loop [trues '() falses '() coll coll]
(cond (empty? coll)
(vector (reverse trues) (reverse falses))
(pred (first coll))
(recur (cons (first coll) trues) falses (rest coll))
:else
(recur trues (cons (first coll) falses) (rest coll)))))
(filter-split #{\a\e\i\o\u} "is this not pung?") => [(\i \i \o \u)
(\s \space \t \h \s \space \n \t \space \p \n \g \?)]
(filter-split even? (range 10)) => [(0 2 4 6 8) (1 3 5 7 9)]
Aloha,
David Sletten
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---