check the discussion with the subject, "time lies, even with doall". We
came up with something like the following, but some name change change
tweaks were suggested. This thing takes a pred and a collection and returns
a list of two collections -- one that passes the pred, and one that fails.
(defn filt-rem [pred coll]
(loop [l1 () l2 () [f & r] coll]
(if f
(if (pred f)
(recur (conj l1 f) l2 r)
(recur l1 (conj l2 f) r))
(list l1 l2))))
On Sat, Mar 7, 2009 at 11:37 PM, Jeffrey Straszheim <
[email protected]> wrote:
> There is separate in seq_utils in contrib.
>
>
> On Sat, Mar 7, 2009 at 11:29 PM, David Sletten <[email protected]> wrote:
>
>>
>> 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
-~----------~----~----~----~------~----~------~--~---