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