如何处理将变量传递给reduce函数的需要?

时间:2017-08-09 18:24:52

标签: clojure

clojure中是否存在类似于reduce的函数,但是它可以传递一个变量吗?

例如,假设我想实现自己的过滤器函数并传入一个谓词来检查整个集合并保留满足谓词的值,是否有一种惯用的方法在使用reduce时执行此操作?

我的猜测是做以下事情:

(->> coll 
    (map #(:val % :pred pred))
    (reduce my-filter-fn {:val 0 :pred pred}))

基本上只是创建一个具有我需要传递给reduce函数的值的地图集合。

我发现需要经常将值传递给reduce函数的用例,但这可能是因为我没有考虑适当的函数方式。是否有更惯用的解决方案?

1 个答案:

答案 0 :(得分:1)

让my-filter-fn变得有趣,并使用部分

   (reduce (partial my-filter-fn pred) 0)

但听起来你也可以使用过滤器代替reduce

   (->> coll
           (filter pred)
           (reduce my-fn)