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
是一个懒惰的序列,但我遗漏了一些东西......
非常感谢你的时间。
答案 0 :(得分:3)
你应该这样做
(reduce + (take-while (partial > 1000) a))
(a)
尝试调用a
,但这不是函数。