Clojure int到char(例如1到\1)

Clojure int到char(例如1到\1),clojure,Clojure,在CLojure中,它们是以字符的形式从一个int到那个int的一种方式,例如1到\1 我有一个字符串s,我想解析出与数字n匹配的数字(n总是0到9) e、 g 哪里???将n作为\n,例如将返回“111” 或者可能有更好的方法将字符串过滤为单个数字的实例?java方法: user=>(字符/forDigit 1 10);数与基数 \1 “计算”方式(将\0的int添加到其中,然后返回到char): user=>(字符(+1(int\0))) \1 在Clojure中,像往常一样,总会有一行r

在CLojure中,它们是以字符的形式从一个int到那个int的一种方式,例如1到\1

我有一个字符串
s
,我想解析出与数字
n
匹配的数字(n总是0到9)

e、 g

哪里???将n作为\n,例如将返回“111”

或者可能有更好的方法将字符串过滤为单个数字的实例?

java方法:

user=>(字符/forDigit 1 10);数与基数
\1
“计算”方式(将
\0
的int添加到其中,然后返回到char):

user=>(字符(+1(int\0)))
\1

在Clojure中,像往常一样,总会有一行
reduce
来解决原始问题:“我只想知道该数字出现的次数。”

如果你是Clojure的新手,这里有很多东西要打开。 Reduce用于迭代字符串,计算每个字符的出现次数并将其存储在映射中

从内到外:

(fnil inc 0)
返回一个运行
inc
并提供任何参数的函数。但是,如果参数为nil,它将替换为0。这非常适合向地图添加新条目

update
用于在
m
中查找现有键
ch
,并计算新值(通过调用
(fnil inc 0
)返回的函数),即如果
ch
不在
m
中,则将运行
(inc 0)=>1
,如果
ch
m
中,它将返回递增的计数器

(fn[m ch]…)
是还原函数。 这是最难理解的部分。它需要两个参数。 第一个是此函数的最后一个返回值(由早期迭代生成),或者如果是此函数第一次运行,则提供初始值:
{}
(还有第三种方法调用reduce,请参见
(doc reduce)

第二个参数
ch
是所提供字符串中的当前字符(因为该字符串是一个字符序列,并计为一个集合)


因此,为每个字符调用缩减函数,我们只需返回当前映射以及每个字符的更新计数,从
{}

开始:这将返回
(\1\1\1)
-您必须再次加入该映射以获得
“111”
@cfrick,这实际上很好。我只想知道该数字出现的次数。由于经常需要计算出现次数,因此有一个标准的fn:
频率
谢谢!这是一个很好的解释。当然,频率!我忘了这个函数一直存在!我非常喜欢实际任务
((频率“111223”)\10)
 (let [n 1]
     (filter #(= ??? %) "123123123"))
(reduce (fn [m ch] (update m ch (fnil inc 0))) {} "123123123")
==> {\1 3, \2 3, \3 3}