Thanks all.  So combining a few suggested ideas:

  (defn slice
  "Return the items in coll at index positions keys.

  (slice [0 4 6] \"abcdefg\") => (\\a \\e \\g)"
    [keys coll]
    (let [max-idx (apply max keys)
          keyset (set keys)]
      (map second
           (filter (fn [[idx _]] (keyset idx))
                   (take-while (fn [[idx _]] (<= idx max-idx))
                               (indexed coll))))))

This version has the advantage of working on infinite sequences and not
hanging onto the head.  This works as expected:

  (slice [200 201] (repeatedly #(int-array 102400)))

without blowing up the stack or throwing OutOfMemory (on my JVM).

Thanks again,

Mark


Mark Triggs <mark.h.tri...@gmail.com> writes:

> Hi all,
>
> Is there an idiom for what I'm doing below, or does a function already
> exist?
>
> (let [vowels (slice "abcdefghijklmnopqrstuvwxyz"
>                      0 4 8 14 20)]
>   vowels)
>   => (\a \e \i \o \u)


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