Алекс, конечно, уже правильно ответил на вопрос относительно исходной проблемы, используя doseq
... но я нашел вопрос интересным и хотел посмотреть, как будет выглядеть более «функциональное» решение. И я имею в виду, не используя цикл.
Я придумал это:
(ns student.dialect (:require [clojure.string :as str]))
(defn germanize [sentence]
(let [letters {"a" "ä" "u" "ü" "o" "ö" "ss" "ß"}
regex (re-pattern (apply str (interpose \| (keys letters))))]
(str/replace sentence regex letters)))
Что дает тот же результат:
student.dialect=> (germanize "elosska")
"elößkä"
Строка regex (re-pattern...
просто оценивается как #"ss|a|o|u"
, что было бы чище и проще для чтения, если бы оно вводилось как явная строка, но я подумал, что лучше всего иметь только одно определение немецких букв.