我发现自己需要一个类似于some-fn
的函数,但它结合了带有多个参数的谓词。
新函数应该使用一组谓词并返回函数f
。函数f
应该返回其应用于所有f
参数的其中一个组合谓词返回的第一个逻辑true值,否则返回逻辑false。所以我应该能够做到这一点:
((some-fn* < >) 1 2)
=> truthy
((some-fn* < >) 1 1)
=> falsey
实施起来很容易:
(defn some-fn* [& fs]
(fn [& args] (loop [fs fs]
(when (seq fs)
(or (apply (first fs) args)
(recur (rest fs)))))))
但是在clojure.core中似乎已经存在这样一个简单的事情了。可以?或者有更简单的方法来实现我的需求吗?
答案 0 :(得分:2)
您可以使用some
:
(defn some-fn* [& ps]
(fn [& args]
(some #(apply % args) ps)))