Given a lazy sequence of numbers is there a way to interleave a constant and get another lazy sequence? Say the first sequence is 1 2 3 4 ... I'd like the second sequence to be 1 0 2 0 3 0 4 0 ....Thanks in advance!
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
Yep, and it is even called interleave. :)
clojure.core=> (interleave [1 2 3 4] (repeat 0))
(1 0 2 0 3 0 4 0)
clojure.core=> (doc interleave)
-------------------------
clojure.core/interleave
([c1 c2] [c1 c2 & colls])
Returns a lazy seq of the first item in each coll, then the second etc.
nil
clojure.core=> (doc repeat)
-------------------------
clojure.core/repeat
([x] [n x])
Returns a lazy (infinite!, or length n if supplied) sequence of xs.
user=> (interpose 0 [1 2 3 4 5])
(1 0 2 0 3 0 4 0 5)
user=>
Ah, I forgot about that one!
As an aside.. I just looked at the source for this, what does the
:static tag in the metadata do?
(defn interpose
"Returns a lazy seq of the elements of coll separated by sep"
{:added "1.0"
:static true}
[sep coll] (drop 1 (interleave (repeat sep) coll)))
> As an aside.. I just looked at the source for this, what does the :static tag in the metadata do?
From what I can make out... nothing. I think it is left over from an experiment to improve var lookup times prior to dynamic binding being disabled by default.