Advertisement
Guest User

Untitled

a guest
Jul 12th, 2011
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (defn do-map
  2.   "Returns a vector of applying f to all first elements of the given collections, all second elements and so on
  3.   until any one of the collections is exhausted.
  4.  "
  5.   ([f coll]  
  6.     (loop [s (seq coll), result (transient [])]
  7.       (let [e (first s)]
  8.         (if e
  9.           (recur (rest s), (conj! result (f e)))
  10.           (persistent! result)
  11.         )
  12.       )
  13.     )      
  14.   )
  15.   ([f c1 c2]    
  16.     (loop [s1 (seq c1), s2 (seq c2), result (transient [])]
  17.       (let [e1 (first s1), e2 (first s2)]
  18.         (if (and e1 e2)
  19.           (recur (rest s1), (rest s2), (conj! result (f e1, e2)) )
  20.           (persistent! result)
  21.         )
  22.       )
  23.     )
  24.   )
  25.   ([f c1 c2 c3]    
  26.     (loop [s1 (seq c1), s2 (seq c2), s3 (seq c3), result (transient [])]
  27.       (let [e1 (first s1), e2 (first s2), e3 (first s3)]
  28.         (if (and e1 e2 e3)
  29.           (recur (rest s1), (rest s2), (rest s3), (conj! result (f e1, e2, e3)) )
  30.           (persistent! result)
  31.         )
  32.       )
  33.     )
  34.   )
  35.   ([f c1 c2 c3 & colls]
  36.     (let [colls (conj colls c3 c2 c1)]
  37.       (loop [seqs (do-map seq colls), result (transient [])]
  38.         (let [es (do-map first seqs)]
  39.           (if (every? identity es)
  40.             (recur (do-map rest seqs), (conj! result (apply f es)))
  41.             (persistent! result)
  42.           )
  43.         )
  44.       )
  45.     )
  46.   )
  47. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement