Helo, пытаясь выучить clojure, я заинтересовался функциями clojure.core, которые действуют на последовательности. Недавно я заметил странное поведение и хотел бы объяснить разницу между выражениями фоллинга:
Я пытаюсь сделать следующее:
user=> (reduce + (take-while (partial > 1000) (iterate inc 1)))
499500
Однако, когда я сохраняю (iterate inc 1)
с def
a, появляется ошибка:
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)
Может кто-нибудь объяснить, в чем разница между хранением iterate inc 1
и использованием его непосредственно в выражении? Я знаю, что a
- это ленивая последовательность, но я что-то упустил ...
Большое спасибо за ваше время.