多个参数的`some-fn`的变体

时间:2015-08-24 15:31:44

标签: clojure

我发现自己需要一个类似于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中似乎已经存在这样一个简单的事情了。可以?或者有更简单的方法来实现我的需求吗?

1 个答案:

答案 0 :(得分:2)

您可以使用some

(defn some-fn* [& ps]
  (fn [& args]
    (some #(apply % args) ps)))