хранение clojure против использования последовательности в выражении - PullRequest
1 голос
/ 04 января 2012

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 - это ленивая последовательность, но я что-то упустил ...

Большое спасибо за ваше время.

1 Ответ

3 голосов
/ 04 января 2012

Вы должны делать

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

(a) попытки вызвать a, но это не функция.

...