On Sun, Mar 8, 2009 at 6:48 AM, Meikel Brandmeyer wrote:
> Hi,
>
> Am 08.03.2009 um 11:44 schrieb Adrian Cuthbertson:
>
> that's a bit slower than both the previous versions. The reduce
>> version does only apply the pred once per item I think?
>>
>
> unzip-with is lazy, the reduce version is no
Hi,
Am 08.03.2009 um 11:44 schrieb Adrian Cuthbertson:
that's a bit slower than both the previous versions. The reduce
version does only apply the pred once per item I think?
unzip-with is lazy, the reduce version is not. I would
prefer laziness over speed.
Sincerely
Meikel
smime.p7s
Desc
> This is exactly what I'm trying to avoid. I don't want to traverse
> the collection twice.
>
In that other thread, "Time lies, even with doall", someone helped me figure
out a way to get the true time for filter-split, and concluded it was 2- 3
times faster than whats in contrib as expected . .
(filt-rem identity '(true nil false 8)) => ((true) ())
> (filt-split identity '(true nil false 8)) => [[true 8] [nil false]]
>
can't speak for this one, cause I don't know enough clojure
>
> (filt-rem even? (range 10)) => ((8 6 4 2 0) (9 7 5 3 1))
> (filter-split even? (range 10)) => [(0 2 4 6 8
Hmm, on the same (micro admittedly) benchmark as above...
(time (let [[a b] (unzip-with even? (range 10))] [(nth a 4)
(nth b 4)]))
"Elapsed time: 177.797 msecs"
[8 9]
that's a bit slower than both the previous versions. The reduce
version does only apply the pred once per ite
The question showed up the other day on #clojure with the additional
constraint to evaluate pred only once per item, here is Rich's solution:
http://paste.lisp.org/display/76458#1
(defn unzip-with [pred coll]
(let [pvs (map #(vector (pred %) %) coll)]
[(for [[p v] pvs :when p] v)
(fo
Sorry, further to that last example, if you actually consume all of
both even and odd sets then the reduce version is more efficient...
(time (let [[a b] (filt-split even? (range 10))] [(nth a 4)
(nth b 4)]))
"Elapsed time: 36.711 msecs"
[8 9]
(time (let [[a b] (separate even
You're absolutely right...
user=> (time (let [[a b] (separate even? (range 100))] (nth a 3)))
"Elapsed time: 0.115 msecs"
6
user=> (time (let [[a b] (filt-split even? (range 100))] (nth a 3)))
"Elapsed time: 413.614 msecs"
6
and is also more efficient over large sequences...
(time (let
It seems to me that neither filt-split nor filter-rem from e are lazy
operations (one uses reduce, the other one uses recur).
The version in clojurecontrib seems to preserve the original property of
filter of returning a lazy sequence.
My 0,02€,
--
Laurent
2009/3/8 Adrian Cuthbertson
>
> That
> ...repeated creation of the ephemeral vectors isn't too expensive.
With Clojure, although it looks like the immutable vectors are being
re-created on each iteration, under the covers it's really just
pointers being updated and the operations are (about) as efficient as
a loop/recur method.
> .
On Mar 7, 2009, at 6:44 PM, e wrote:
> 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 collection
On Mar 7, 2009, at 7:17 PM, Adrian Cuthbertson wrote:
>
> That's the beauty of this language - there are many ways to skin
> the cat!
Hmmm...I'm not sure what I'll do with a skinless cat. :)
> Here's a version using reduce...
>
> (defn filt-split [pred col]
> (reduce (fn [[a b] x] (if (pred
That's the beauty of this language - there are many ways to skin the cat!
Here's a version using reduce...
(defn filt-split [pred col]
(reduce (fn [[a b] x] (if (pred x) [(conj a x) b] [a (conj b x)]))
[[] []] col))
(filt-split even? [1 2 3 4 5 6 7 8])
[[2 4 6 8] [1 3 5 7]]
But when you look a
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.
(d
There is separate in seq_utils in contrib.
On Sat, Mar 7, 2009 at 11:29 PM, David Sletten 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 s
15 matches
Mail list logo