为什么
(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)
?
答案 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)