生成“a”到“Z” Clojure中的字符序列(Generate character sequenc

2019-06-26 13:37发布

我想从“A”到“Z”生成字符序列。 在Scala中,我可以生成字符序列得很干脆:

('a' to 'z')

但是Clojure中,我结束了下面的代码:

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

要么

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

在我看来,冗长。 是否有更好的方法来做到这一点?

Answer 1:

如果代码看起来“冗长”往往只是你要因素它到一个单独的功能的标志。 作为奖励,你给函数一个有意义的名字的机会。

只是这样做,你的代码会更可读:

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

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


Answer 2:

根据这个StackOverflow的答案一个简单的解决办法是:

(map char (range 97 123))



Answer 3:

据我所知,没有这样一个奇特的方式斯卡拉。 怎么样

(flatten (partition 1 "abcdefghijklmnopqrstuvwxyz"))

编辑

更奇特的方式,这要归功于@rhu

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


Answer 4:

如果你有兴趣,让你方便的图书馆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))
("