Я только начинаю изучать Clojure, поэтому, пожалуйста, принимайте этот ответ с осторожностью.
В дополнение к тому, что уже было предложено, я бы поместил карту конверсий в форму let
, чтобы сохранить вашу функцию "изолированный». (Как и ваша функция полагается на conversions
, определяемый вне ее области действия.)
Я также прочитал (не могу вспомнить, где именно), что общее соглашение об именах при написании функций, которые "конвертируют" Xдля Y должно быть указано следующее: x->y
.
Наконец, я бы использовал макропоток для улучшения читаемости.
(defn dna->rna [dna]
(let [conversions {\G \C
\C \G
\T \A
\A \U}]
(->> dna
(map conversions)
(string/join ""))))
(dna->rna "GC")
;; "CG"