Dan*_*ero 22
如果你想保持truthy值只需要使用identity
函数:
(count (filter identity '(1 2 3 nil nil false true)))
Run Code Online (Sandbox Code Playgroud)
我建议使用reduce执行此操作,如下所示:
(defn count-truthy [coll]
(reduce (fn [cnt val] (if val (inc cnt) cnt)) 0 coll))
Run Code Online (Sandbox Code Playgroud)
以这种方式使用reduce的原因:
如果你已经有一个已实现的序列,那么以下也是一个不错的选择,因为它将受益于循环中的原始算法:
(defn count-truthy [coll]
(loop [s (seq coll) cnt 0]
(if s
(recur (next s) (if (first s) (inc cnt) cnt))
cnt)))
Run Code Online (Sandbox Code Playgroud)