\$\begingroup\$
\$\endgroup\$
In getting accustomed to Clojure syntax, I wrote the following stutter
function:
(defn doublelist [coll]
(flatten (map (fn [x] [x x]) coll)))
(defn stutter [s]
(clojure.string/join
" " (doublelist (clojure.string/split s #" "))))
This duplicates every word in an input string:
(stutter "how are you?")
"how how are are you? you?"
The doublelist
function bugs me. It seems that repeating items in a list should be possible without a call to flatten
.
Any thoughts?
1 Answer 1
\$\begingroup\$
\$\endgroup\$
You may use mapcat
to omit flatten
:
user> (defn doublelist [coll]
(mapcat #(repeat 2 %) coll))
#'user/doublelist
user> (doublelist [:a :b :c :d])
(:a :a :b :b :c :c :d :d)
lang-clj