1

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

非常感谢您的宝贵时间。

4

1 回答 1

3

你应该做

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

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

于 2012-01-04T14:44:30.160 回答