1) Чтобы преобразовать последовательность символов (то, что возвращает mutate-index
) в строку, используйте apply str
, а не просто str
.Последний работает с объектами, а не с последовательностями.
(str [\a \b \c])
=> "[\\a \\b \\c]"
(apply str [\a \b \c])
=> "abc"
2) Строки являются секвенируемыми, что означает, что вы можете использовать функции последовательности, такие как map
и filter
, непосредственно без них, например .toCharArray
.
3) Подумайте об использовании map-indexed
или StringBuilder
, чтобы выполнить то, что вы пытаетесь сделать:
(apply str (map-indexed (fn [i c] (if (= 3 i) \X c)) "foobar"))
=> "fooXar"
(str (doto (StringBuilder. "foobar") (.setCharAt 3 \X)))
=> "fooXar"