Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defn do-map
- "Returns a vector of applying f to all first elements of the given collections, all second elements and so on
- until any one of the collections is exhausted.
- "
- ([f coll]
- (loop [s (seq coll), result (transient [])]
- (let [e (first s)]
- (if e
- (recur (rest s), (conj! result (f e)))
- (persistent! result)
- )
- )
- )
- )
- ([f c1 c2]
- (loop [s1 (seq c1), s2 (seq c2), result (transient [])]
- (let [e1 (first s1), e2 (first s2)]
- (if (and e1 e2)
- (recur (rest s1), (rest s2), (conj! result (f e1, e2)) )
- (persistent! result)
- )
- )
- )
- )
- ([f c1 c2 c3]
- (loop [s1 (seq c1), s2 (seq c2), s3 (seq c3), result (transient [])]
- (let [e1 (first s1), e2 (first s2), e3 (first s3)]
- (if (and e1 e2 e3)
- (recur (rest s1), (rest s2), (rest s3), (conj! result (f e1, e2, e3)) )
- (persistent! result)
- )
- )
- )
- )
- ([f c1 c2 c3 & colls]
- (let [colls (conj colls c3 c2 c1)]
- (loop [seqs (do-map seq colls), result (transient [])]
- (let [es (do-map first seqs)]
- (if (every? identity es)
- (recur (do-map rest seqs), (conj! result (apply f es)))
- (persistent! result)
- )
- )
- )
- )
- )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement