假设我有一个返回一个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接受两个参数,序列中的每个元素都被认为是一个东西(尽管是一对)。
答案 0 :(得分:5)
您缺少apply
。它将给定函数应用于参数列表,就好像它们是个体一样。因此,(f 0 1)
和(apply f [0 1])
在大多数实际用途中是等效的。在你的情况下,它将是:
(filter #(apply p %) (f))