(def all-names ["John" "James" "Jakob" "Peter" "Janette" "Tom" "Vasya" "Jean" "Juilia" "Heather"])

(defn filter-names-by [regexp, names]
  "...and returns collection of names."
  (filter #(re-matches regexp %) names))

(def matched-names (filter-names-by #"J[a-z]+" all-names))

(defn names->story [names]
  "Creates astonishing story from plain names."
  (clojure.string/join 
    "\n" 
    (for [[first second third]
          (partition 3 names)]
      (format "%s and %s follow %s" first second third))))

(def story (names->story matched-names))
(print story)