Skip to content

Instantly share code, notes, and snippets.

;sample use idea:
(defn mapx
"Returns a lazy sequence consisting of the result of applying f to the
set of first items of each coll, followed by applying f to the set
of second items in each coll, until any one of the colls is
exhausted. Any remaining items in other colls are ignored. Function
f should accept number-of-colls arguments."
[f coll]
(gen-iter iter [f seq-cell]
(defmacro gen-iter-fn
[name [op coll] has-item-body item-body move!-body]
`(defn ~name [~op ~coll]
(letfn
[(iter# [~op ~coll]
(reify :as ~'this
~'Iter
(~'has-item [] ~@has-item-body)
(~'item [] ~@item-body)
(~'move! [] ~@move!-body)