use collection and tail in map
(fn [pred mark [head & tail :as coll]] (when (seq coll) (cons head (mapcat #(if (pred % %2) [mark %2] [%2]) coll tail))))