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

时间:2012-01-04 14:41:29

标签: clojure lazy-evaluation sequences lazy-sequences

Helo,为了学习clojure,我对clojure.core函数感兴趣,这些函数作用于序列。最近,我注意到一些奇怪的行为,并希望解释下面的表达式之间的区别:

我想做的是:

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

非常感谢你的时间。

1 个答案:

答案 0 :(得分:3)

你应该这样做

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

(a)尝试调用a,但这不是函数。