That works nicely, even for infinite sequences, but appears to hang on
to the head:

  user=> (split [2000 2001] (repeatedly #(int-array 102400)))
  java.lang.OutOfMemoryError: Java heap space

The map/nth variant has this same problem, unfortunately.  My original
version works around these issues at the expense of being longer and
uglier ;o)

Mark


CuppoJava <patrickli_2...@hotmail.com> writes:

> I see. Thanks for explaining.
>
> If speed is an issue, and if you can assume that indices are properly
> sorted in ascending order, I believe this looks like a lazy-reduce
> problem. Clojure has no lazy-reduce (or does it?) so I've written my
> own:
>
> (defn lazy_reduce [f val coll]
>   (lazy-seq
>     (if (seq coll)
>       (let [val (f val (first coll))]
>         (cons val (lazy_reduce f val (rest coll)))))))
>
> (defn split [indices coll]
>   (map first
>        (lazy_reduce nthnext coll
>          (map - indices (cons 0 indices)))))

-- 
Mark Triggs
<mark.h.tri...@gmail.com>

--~--~---------~--~----~------------~-------~--~----~
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