在clojure函数中使用过滤器

eug100

为什么

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

?

彼得雷克·布兹迪尔

您的匿名函数存在问题 - 让我们以更易读的方式编写它:

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

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

正确的版本是:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章