我有一个函数可以接受任意数量的谓词并过滤每个谓词的seq,如下所示:
(defn andp [& fns]
(fn [& args]
(every? #(apply % args) fns)))
(defn pred-and
([] "what to return")
([x] x)
([x y] (andp x y))
([x y & more]
(reduce pred-and (pred-and x y) more)
)
)
这对于1个或更多这样的参数如此预期有效:
(filter (pred-and pos? odd?) [1 2 -4 0 6 7 -3]) => [1 7] // For one parameter
(filter (pred-and number? integer? pos? even?) [1 0 -2
:a 7 "a" 2]) => [2] // For two parameters
问题是当我没有传递参数时,它应该返回原始序列怎么做?
(filter (pred-and) [1 0 -2]) => [1 0 -2]
答案 0 :(得分:1)
根据docs过滤器
返回coll中项目的延迟序列,其中(pred item)返回true。
要获得原始序列,(pred item)必须为每个项目返回true。
(fn [x] true)
应该可以解决问题。