Какой идиоматический способ сопоставить вектор в соответствии с самым длинным seq в clojure?

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

даст:

([1 4] [2 5])

Здесь 3 отбрасывается.

Что делать, если я хочу автоматически наложить эти короткие строки на максимальную длину?

например. Какой идиоматический способ, если я хочу получить

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

Ответ 1

(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])