假设我有一个返回 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 接受两个参数,并且序列中的每个元素都被视为一个事物(尽管是一对)。
最佳答案
您缺少申请
。它将给定的函数应用于参数列表,就好像它们是单独的一样。因此,(f 0 1)
和 (apply f [0 1])
对于大多数实际用途来说是等效的。在你的情况下,它将是:
(filter #(apply p %) (f))
关于clojure - 如何使用 n-arg 谓词过滤 n-元组的 seq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33461495/