「a」から「z」までの文字列を生成したい。scala では、文字シーケンスを非常に簡単に生成できます。
('a' to 'z')
しかし、clojure では、次のコードになります。
(->> (range (int \a) (inc (int \z))) (map char))
また
(map char (range (int \a) (inc (int \z))))
私には冗長に思えます。それを行うより良い方法はありますか?
コードが「冗長」に見える場合は、多くの場合、それを別の関数に分解する必要があるというサインです。おまけとして、関数に意味のある名前を付けるチャンスがあります。
次のようにするだけで、コードがはるかに読みやすくなります。
(defn char-range [start end]
(map char (range (int start) (inc (int end)))))
(char-range \a \f)
=> (\a \b \c \d \e \f)
この StackOverflow Answerによると、簡単な解決策は次のようになります。
(map char (range 97 123))
私の知る限り、Scalaのような派手な方法はありません。どうですか
(flatten (partition 1 "abcdefghijklmnopqrstuvwxyz"))
@rhuのおかげで、もっと派手な方法
(seq "abcdefghijklmnopqrstuvwxyz") ; if you copied this from an earlier version, \w and \v were in the wrong positions