【问题标题】:How to filter seq of n-tuples with n-arg predicate?如何使用 n-arg 谓词过滤 n-tuples 的 seq?
【发布时间】:2015-11-01 11:04:56
【问题描述】:

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

例如,说 f 被定义为返回一个对的序列

(defn f [] (for [a (range 1 10) b (range 1 10)] [a b]))

and p 接受两个参数,如果相等则返回 true

(defn p [a b] (= a b))

我想做这样的事情

(filter p (f))

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多