【发布时间】:2016-05-04 19:16:12
【问题描述】:
我是 Clojure 和 Lisp 的新手,但到目前为止我很喜欢它。我目前正在尝试了解惰性序列和 Clojure 定义无限序列的能力。我有以下代码:
(defn geometric
([] geometric 1)
([n] (cons n (lazy-seq (geometric (* n 1/2))))))
如果我跑:
(geometric)
在我的 REPL 中,它按预期返回 1。但是,如果我跑步,
(take 10 (geometric))
我收到以下错误:
IllegalArgumentException Don't know how to create ISeq from:
java.lang.Long clojure.lang.RT.seqFrom
我期望得到的是:
(1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512)
为什么会出现此错误?如果我理解正确的话,应该能够将 n 用于惰性序列,并且 take 应该返回序列的前十个值,递归评估。
【问题讨论】: