2015-11-01 83 views
2

假設我有一個函數f,它返回一個n元組序列和一個帶有n個參數的謂詞p - 如何過濾f以獲得一個包含那些元組中每個元素的p爲真的元組的序列?如何用n-arg謂詞過濾n元組的seq?

例如,假設f定義返回對

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

的序列和P需要兩個參數,如果他們是平等的

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

我想要做這樣的事返回true

(filter p (f)) 

但是編譯器會拋出一個ArityException,因爲p有兩個參數和eac h元素被認爲是一件事(儘管是一對)。

回答

5

你正在失去apply。它將給定的函數應用於參數列表,就好像它們是單獨的。因此,(f 0 1)(apply f [0 1])對於大多數實際目的是等同的。在你的情況下,它將是:

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