Search code examples
functionclojure

Using filter in clojure function


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)

?


Solution

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