2017-08-09 76 views
0

clojure中是否存在类似于reduce的函数,但可以传入一个变量?如何处理需要将变量传递给reduce函数?

例如,假设我想实现我自己的过滤器函数并传入一个谓词来检查整个集合并保留满足谓词的值,那么在使用reduce时是否存在这样做的惯用方法?

我的猜测是做到以下几点:

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

基本上只是创建有我需要传递到降低函数值的地图集合。

我发现需要频繁地将值传递给reduce函数的用例,但这可能是因为我没有以适当的功能方式思考。有没有更习惯的解决方案?

+3

我真的不明白你正在尝试做什么。你可以添加一个数据前/后的例子吗? –

回答

1

让我过滤-FN是三元数的乐趣,并使用部分

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

但它也听起来像是你可以使用过滤器,而不是减少

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