我对Clojure比较陌生,所以我可能要问的可能是完全错误的。基本上我想创建一个名为wordCount的函数,它计算从另一个方法传入的单词。我的代码结构如下;
( defn createWordMap [x]
(cond
(= (mod x 3) 0) "divisible by 3"
:else (print-str x))
)
( defn wordCount [x]
;; I want to count the words in the map created and passed in
)
( wordCount ( map createWordMap ( range 100 ) ) )
答案 0 :(得分:3)
我把它分成了几个部分。我建议你在每个部分的末尾停止阅读,看看你能得到多少。
您的createWordMap
功能看起来不对。
nil
。此处无需使用cond
。 if
也会这样做。
将数字作为字符串的函数可以是
(defn words [x]
(if (= (mod x 3) 0)
"divisible by 3"
(str x)))
它没有创建地图,所以我们只需将其称为words
。
现在我们需要一些东西来计算字符串中的单词。正如the other solution所做的那样,我们计算空格并加1.它用正则表达式更快更普遍地做到这一点,但我们现在暂时搁置它。
(defn count-words [s]
(->> s
(filter #{\space})
count
inc))
->>
宏线程连续的函数调用。#{\space}
作为一个只返回true的函数运行
一个空间。现在我们需要
0
到99
的数字映射到其字符串如果您不想看到答案,请继续阅读。
(apply + (map (comp count-words words) (range 100)))
;168
使用正则表达式
如果我们想要了解这些词 - 不只是计算它们,我们可以使用re-seq
:
(re-seq #"\w+" "mary had a little lamb")
;("mary" "had" "a" "little" "lamb")
它接受任何序列的空格字符作为单词分隔符。
然后答案可以表达
(apply + (map (comp count #(re-seq #"\w+" %) words) (range 100)))
答案 1 :(得分:0)
天真的解决方案
(defn wordCount [x] (reduce + (map #(inc (count (filter (partial = \space) %))) x)))
假设默认情况下修剪了
(reduce + some-list-of-numbers) ;; sums a list of number
和
#(int (count (filter (partial = \space) %)))
是一个计算空格数并添加1的函数。
这就是全部。