【发布时间】:2014-10-26 13:36:09
【问题描述】:
我有一个函数可以接受任意数量的谓词并过滤每个谓词的序列,如下所示:
(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 2 或更多参数,这可以正常工作:
(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]
【问题讨论】:
标签: clojure functional-programming