我是新手学习Clojure,目前在学习“loop / recur”方面遇到了一些困难。我的问题基本上是为什么我的“自定义”range
函数不能返回一个惰性序列。这个实现有什么问题或者在这种情况下不应该使用递归吗?
(defn my-range
[nr]
(loop [l nr acc '()]
(if (< l 1)
acc
(recur (dec l) (conj acc l)))))
当我运行它时:
> (time (take 10 (my-range 100000))) ;; "Elapsed time: 85.443 msecs"
> (time (take 10 (range 100000))) ;; "Elapsed time: 0.095 msecs"
非常大的时间差让我相信列表首先被构建,然后再取10个。
range
从0
开始,而不是1
。这不会影响问题。 - Thumbnail