在Clojure中将多个过滤器应用于鹅口疮中的集合

Geo*_*rge 9 clojure

以下代码

(let [coll [1 2 3 4 5]
      filters [#(> % 1) #(< % 5)]]
  (->> coll
       (filter (first filters))
       (filter (second filters))))
Run Code Online (Sandbox Code Playgroud)

给我

(2 3 4)
Run Code Online (Sandbox Code Playgroud)

哪个好,但是如何在coll中应用所有过滤器而不必明确命名它们?

可能有更好的方法来做到这一点,但理想情况下我想知道上面可以替换(过滤器(第一个过滤器))(过滤器(第二个过滤器))的表达式.

谢谢!

Jus*_*mer 18

Clojure 1.3有一个新every-pred功能,你可以这样使用:

(filter (apply every-pred filters) coll)
Run Code Online (Sandbox Code Playgroud)


小智 13

这应该工作: -

(let [coll [1 2 3 4 5]
      filters [#(> % 1) #(< % 5)]]
  (filter (fn [x] (every? #(% x) filters)) coll)
)
Run Code Online (Sandbox Code Playgroud)