【发布时间】:2016-03-11 23:30:38
【问题描述】:
我目前正在阅读 Clojure for the Brave and True 一书,试图学习这门语言,但我有点沉迷于懒惰的 seqs,恐怕@ 987654321@。但是,根据这本书,是这样的:
(defn wait-for-a-bit [arg]
(Thread/sleep 1000))
(defn get-map [seq]
(map wait-for-a-bit seq))
(time (first (get-map [1 2 3 4 5 6 7 8 9 0])))
应该只需要大约一秒钟的时间来处理,因为惰性序列的值在被访问之前不会被计算(实现?)。但是,当我运行上面的代码时,大约需要十秒钟,所以很明显,延迟计算没有发生。我查看了clojuredocs.org 上的文档,我想我了解lazy-seq,但我想只是不在map、reduce 等的上下文中。
【问题讨论】:
-
我看到了类似的。然后我尝试了
(time (first (get-map (iterate inc 1000)))),它给了我更直观的 1 秒响应。
标签: clojure lazy-evaluation lazy-sequences