假设我有一个返回一个n元组序列的函数f和一个带有n个参数的谓词p - 如何过滤f以获得一个只包含那些元组的序列,其中p应用于元组的每个元素是真的?
例如,假设f被定义为返回一对对
(defn f [] (for [a (range 1 10) b (range 1 10)] [a b]))
Run Code Online (Sandbox Code Playgroud)
并且p接受两个参数,如果它们相等则返回true
(defn p [a b] (= a b))
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情
(filter p (f))
Run Code Online (Sandbox Code Playgroud)
但是编译器抛出一个ArityException,因为p接受两个参数,序列中的每个元素都被认为是一个东西(尽管是一对).
你错过了apply.它将给定函数应用于参数列表,就好像它们是个体一样.因此,(f 0 1)并且(apply f [0 1])对于大多数实际目的而言是等同的 在你的情况下,它将是:
(filter #(apply p %) (f))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |