clojure在表达式中存储与使用序列

clojure在表达式中存储与使用序列,clojure,lazy-evaluation,sequences,lazy-sequences,Clojure,Lazy Evaluation,Sequences,Lazy Sequences,Helo,为了学习clojure,我对clojure.core函数感兴趣,它作用于序列。最近,我注意到一些奇怪的行为,我想解释一下福林表情之间的区别: 我想做的是: user=> (reduce + (take-while (partial > 1000) (iterate inc 1))) 499500 但是,当我使用def存储(iterate inc 1)时,会得到一个错误: user=> (def a (iterate inc 1)) #'user/a user=>

Helo,为了学习clojure,我对clojure.core函数感兴趣,它作用于序列。最近,我注意到一些奇怪的行为,我想解释一下福林表情之间的区别:

我想做的是:

user=> (reduce + (take-while (partial > 1000) (iterate inc 1)))
499500
但是,当我使用
def
存储
(iterate inc 1)
时,会得到一个错误:

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
是一个懒惰的序列,但我遗漏了一些东西

非常感谢您抽出时间。

您应该这样做

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

(a)
尝试调用
a
,但它不是一个函数。

啊,是的,这解释了将clojure.lang.cons转换为clojure.lang.IFn的错误消息。