在Clojure函数中使用过滤器

时间:2018-09-19 06:59:15

标签: function clojure

为什么

(filter even? (range 10))

给予     (0 2 4 6 8)

但是

((fn [x] filter even? x)
          (range 10))

给予

(0 1 2 3 4 5 6 7 8 9)

1 个答案:

答案 0 :(得分:8)

您的匿名函数中有一个问题-让我们以一种更具可读性的方式编写它:

((fn [x]
   (do filter
       even?
       x))
 (range 10))

现在,我认为很明显为什么它返回整个范围序列:(range 10)的值绑定到参数x并作为函数结果返回。

正确的版本应该是:

((fn [x] (filter even? x))
 (range 10))
;; => (0 2 4 6 8)