我是clojure的新手,目前正在與loop/recur
拼搏。這個問題基本上是爲什麼我的'自定義'功能。不會返回一個懶惰的序列。我的實現有什麼問題,或者你不應該在這種情況下使用遞歸?用Clojure中的遞歸生成lazy seq?
(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