Генерировать последовательность символов от '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)
Ответ 2
В соответствии с fooobar.com/questions/481620/... простым решением будет:
(map char (range 97 123))
Ответ 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