(Clojure) 计算任意字符在字符串中出现的次数

1 character clojure pattern-matching string-matching clojure-repl

我正在尝试编写一个函数(字符计数),它接受一个模式和一个字符串,然后返回一个数字(计数),该数字表示模式中的任何字符在字符串中出现的次数。

例如:

(char-count "Bb" "Best buy")

会返回,2因为 1 场比赛B和 1 场比赛b,所以加在一起我们得到2

(char-count "AaR" "A Tale of Recursion")

会回来3等等


我尝试re-seq在我的函数中使用,但它似乎只适用于连续字符串。因为(re-seq #Bb "Best Buy)仅查找模式Bb,而不查找每个单独的字符。

到目前为止,我的函数是这样的:

(defn char-count [pattern text]
  (count (re-seq (#(pattern)) text)))
Run Code Online (Sandbox Code Playgroud)

但它并没有达到我想要的效果。有人可以帮忙吗?

Ps 对 clojure(以及一般的函数式编程)非常陌生。

ama*_*loy 6

您不需要任何像正则表达式一样强大的东西,因此只需使用编程语言附带的简单工具:集合和函数。构建一组要查找的字符,并计算该组中有多少输入字符串中的字符。

(defn char-count [chars s]
  (count (filter (set chars) s)))
Run Code Online (Sandbox Code Playgroud)