16

「a」から「z」までの文字列を生成したい。scala では、文字シーケンスを非常に簡単に生成できます。

('a' to 'z')

しかし、clojure では、次のコードになります。

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

また

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

私には冗長に思えます。それを行うより良い方法はありますか?

4

4 に答える 4

36

コードが「冗長」に見える場合は、多くの場合、それを別の関数に分解する必要があるというサインです。おまけとして、関数に意味のある名前を付けるチャンスがあります。

次のようにするだけで、コードがはるかに読みやすくなります。

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

(char-range \a \f)
=> (\a \b \c \d \e \f)
于 2012-07-28T05:20:42.230 に答える
17

この StackOverflow Answerによると、簡単な解決策は次のようになります。

(map char (range 97 123))

于 2012-07-26T14:10:15.663 に答える
9

私の知る限り、Scalaのような派手な方法はありません。どうですか

(flatten (partition 1 "abcdefghijklmnopqrstuvwxyz"))

編集

@rhuのおかげで、もっと派手な方法

(seq "abcdefghijklmnopqrstuvwxyz") ; if you copied this from an earlier version, \w and \v were in the wrong positions
于 2012-07-26T14:11:01.233 に答える