Clojure int到char(例如1到\1)
在CLojure中,它们是以字符的形式从一个int到那个int的一种方式,例如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
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}