Why
(filter even? (range 10))
gives (0 2 4 6 8)
but
((fn [x] filter even? x)
(range 10))
gives
(0 1 2 3 4 5 6 7 8 9)
?
There is an issue in your anonymous function - let's write it in a more readable way:
((fn [x]
(do filter
even?
x))
(range 10))
Now I think it is obvious why it returns the whole range sequence: value of (range 10)
is bound to argument x
and is returned as the result from your function.
The correct version would be:
((fn [x] (filter even? x))
(range 10))
;; => (0 2 4 6 8)