clojure在表达式中存储与使用序列
Helo,为了学习clojure,我对clojure.core函数感兴趣,它作用于序列。最近,我注意到一些奇怪的行为,我想解释一下福林表情之间的区别: 我想做的是: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=>
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的错误消息。