我想从“A”到“Z”生成字符序列。 在Scala中,我可以生成字符序列得很干脆:
('a' to 'z')
但是Clojure中,我结束了下面的代码:
(->> (range (int \a) (inc (int \z))) (map char))
要么
(map char (range (int \a) (inc (int \z))))
在我看来,冗长。 是否有更好的方法来做到这一点?
我想从“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的答案一个简单的解决办法是:
(map char (range 97 123))
据我所知,没有这样一个奇特的方式斯卡拉。 怎么样
(flatten (partition 1 "abcdefghijklmnopqrstuvwxyz"))
更奇特的方式,这要归功于@rhu
(seq "abcdefghijklmnopqrstuvwxyz") ; if you copied this from an earlier version, \w and \v were in the wrong positions
如果你有兴趣,让你方便的图书馆char-range
功能,我的图书馆djy
有一个:见djy.char/char-range
。
boot.user=> (char-range \a \z)
(\a \b \c \d \e \f \g \h \i \j \k \l \m \n \o \p \q \r \s \t \u \v \w \x \y \z)
它甚至处理是足够大,它们需要2个字符,代表他们作为字符串补充Unicode字符:
boot.user=> (char-range (char' 0x1f910) (char' 0x1f917))
("