2015-08-24 22 views
2

我發現自己需要一個類似於some-fn的函數,但它組合了帶多個參數的謂詞。多個參數的`some-fn`的變體

新函數應該帶一組謂詞並返回一個函數f。函數f應返回由其構成謂詞之一返回的第一個邏輯真值,該值適用於所有f的參數,否則返回邏輯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已經存在這樣一個簡單的事情。可以?還是有一種更簡單的方法來實現我所需要的?

回答

2

您可以使用some

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