问题 根据clojure中最长的seq来映射向量的惯用方法是什么?


(map vector [1 2 3] [4 5])

会给:

([1 4] [2 5])

这里3被丢弃了。

如果我想自动将那些太短的seqs填充到最大长度怎么办?

例如 如果我想得到什么是惯用的方式

([1 4] [2 5] [3 nil])

10293
2018-04-02 16:38


起源



答案:


(defn map-all [f & colls]
  (lazy-seq
   (when (some seq colls)
     (cons (apply f (map first colls))
           (apply map-all f (map rest colls))))))

(map-all vector [1 2 3] [4 5])
;=> ([1 4] [2 5] [3 nil])

14
2018-04-02 18:35



这真的很优雅。 - event_jr


答案:


(defn map-all [f & colls]
  (lazy-seq
   (when (some seq colls)
     (cons (apply f (map first colls))
           (apply map-all f (map rest colls))))))

(map-all vector [1 2 3] [4 5])
;=> ([1 4] [2 5] [3 nil])

14
2018-04-02 18:35



这真的很优雅。 - event_jr