2024 Clojure状态调查!中分享您的想法:

欢迎!请参阅关于页面以获取更多关于此信息。

0

Map、Filter以及Reduce在函数式编程中非常常见。
在所有有这些函数的语言中,只有Clojure有在map上添加多个列表的能力,例如- (map + lst1 lst2),这是最有用的功能之一!

但是为什么不能在Filter上执行同样的操作呢?例如-

(filter (fn [a1 b1] (pos? (+ a1 b1))) [1 2 3] [-2 4 0]) 

将会得到错误信息“将3个参数传递给clojure.core/filter时参数数不正确”。
我假设这不是常见的做法有它的原因,但我很难理解其中原因。

谢谢!

2个答案

0

我不是Clojure团队的成员,但对我来说,这听起来像是一个合理的架构选择。

要使其工作,你还需要提供一个函数来将多个值合并为一个。有人可能会说,向量在这里最有意义,但这并不总是如此。当你已经可以这样做时,它增加了不必要的复杂性

(filter (fn [[a b]] (pos? (+ a b)))
        (map vector [1 2 3] [-2 4 0]))

但在这个案例中,keep将非常合适 - 关于它的最近的一个提问已经出现。

0

大多数与filter一起使用的前缀函数只需要一个参数,因此通常不需要这样做。

...