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

标签 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 接受两个参数,并且序列中的每个元素都被视为一个事物(尽管是一对)。

最佳答案

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

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

关于clojure - 如何使用 n-arg 谓词过滤 n-元组的 seq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33461495/

相关文章:

postgresql - 当一行有一个外键到另一行时,如何原子地写入两行?

Clojure交换!原子出队

clojure - 内部惰性序列究竟是如何工作的

clojure - doto 和有条件地设置属性

Clojure。向量和列表。缺点和偷看

clojure - 在 Clojure sql 中,如何使 where 子句不区分大小写?

constructor - 使用 Clojure reify 提供构造函数

clojure - 如何忽略不必要的争论?

clojure - Factor Clojure 代码在 Java 对象中设置许多不同的字段

clojure - defn 与 let 关于分解的比较