如何用n-arg谓词过滤se-of n-tuples?

时间:2015-11-01 11:04:57

标签: clojure

假设我有一个返回一个n元组序列的函数f和一个带有n个参数的谓词p - 我如何过滤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接受两个参数,序列中的每个元素都被认为是一个东西(尽管是一对)。

1 个答案:

答案 0 :(得分:5)

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

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