1

Helo, In an effort to learn clojure, I have taken an interest in clojure.core functions that act on sequences. Recently, I noticed some odd behaviour and would like an explaination of the difference between the folling expressions:

What I'm trying to do is this:

user=> (reduce + (take-while (partial > 1000) (iterate inc 1)))
499500

However, when I store (iterate inc 1) with def a get an error:

user=> (def a (iterate inc 1))
#'user/a
user=> (reduce + (take-while (partial > 1000) (a)))
java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0)

Could someone please explain what the difference between storing iterate inc 1 and using it directly in the expression? I know that a is a lazy sequence but am missing something...

Thank you very much for your time.

wespiserA
  • 3,131
  • 5
  • 28
  • 36

1 Answers1

3

You should be doing

(reduce + (take-while (partial > 1000) a))

(a) attempts to call a, but it's not a function.

Fred Foo
  • 355,277
  • 75
  • 744
  • 836