Clojure 如何使用n-arg谓词过滤n元组的seq?

Clojure 如何使用n-arg谓词过滤n元组的seq?,clojure,Clojure,假设我有一个函数f,它返回一个n元组序列,还有一个谓词p,它接受n个参数-我如何过滤f,以获得一个只包含那些元组的序列,其中p应用于元组的每个元素是真的 例如,假设f被定义为返回一系列对 (defn f [] (for [a (range 1 10) b (range 1 10)] [a b])) p接受两个参数,如果它们相等,则返回true (defn p [a b] (= a b)) 我想做这样的事情 (filter p (f)) 但是编译器抛出一个ArityException,因为p

假设我有一个函数f,它返回一个n元组序列,还有一个谓词p,它接受n个参数-我如何过滤f,以获得一个只包含那些元组的序列,其中p应用于元组的每个元素是真的

例如,假设f被定义为返回一系列对

(defn f [] (for [a (range 1 10) b (range 1 10)] [a b]))
p接受两个参数,如果它们相等,则返回true

(defn p [a b] (= a b))
我想做这样的事情

(filter p (f))

但是编译器抛出一个ArityException,因为p接受两个参数,并且序列中的每个元素都被视为一件事(尽管是一对)。

您缺少
apply
。它将给定函数应用于参数列表,就像它们是单独的一样。因此,
(f01)
(apply f[01])
在大多数实际应用中是等效的。在您的情况下,它将是:

(filter #(apply p %) (f))