Генерировать последовательность символов от 'a' до 'z' в clojure

Я хочу сгенерировать последовательность символов от 'a' до 'z'. В scala я могу генерировать последовательность символов очень просто:

('a' to 'z')

Но в clojure я получаю следующий код:

(->> (range (int \a) (inc (int \z))) (map char))

или

(map char (range (int \a) (inc (int \z))))

Мне кажется многословным. Есть ли лучшие способы сделать это?

Ответ 1

Если код выглядит "verbose", это часто является признаком того, что вы должны учитывать его в отдельной функции. В качестве бонуса вы получаете возможность присвоить функции значащее имя.

Просто сделайте что-нибудь подобное, и ваш код будет намного читабельнее:

(defn char-range [start end]
  (map char (range (int start) (inc (int end)))))

(char-range \a \f)
=> (\a \b \c \d \e \f)

Ответ 3

AFAIK, нет такого причудливого способа, как Scala. Как насчет

(flatten (partition 1 "abcdefghijklmnopqrstuvwxyz"))

Изменить

Более причудливый способ, благодаря @rhu

(seq "abcdefghijklmnopqrstuvwxyz") ; if you copied this from an earlier version, \w and \v were in the wrong positions