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]) 

会导致“向clojure.core/filter传递的参数数量不正确(3)”。
我假设这一定有原因,但我觉得很难理解。

谢谢!

2 答案

0

我不是Clojure团队的一员,但在我看来,这听起来像是一个合理的设计选择。

为此,您还需要提供一个将多个值组合为一个值的函数。有人可能会争论在这个场景中使用vector最有意义,但这并不总是情况。这会增加不必要的复杂性,因为您已经可以这样做

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

但是在这种情况下,keep将非常合适,而且最近有一个关于它的询问

0

大多数与过滤器一起使用的 predicter 只需要一个参数,因此通常不需要这样做。

...