【发布时间】:2015-05-17 09:10:14
【问题描述】:
当我在我的 repl 中运行 (println (iterate inc 0)) 时,我会得到这样的结果:
user=> (println (iterate inc 0))
(0 1 2 3 4 5 6 7 8 9 10 11 12 13 ....................
当我运行代码时,我的期望是 repl 什么都没有显示,只是卡住了,因为(iterate inc 0) 永远不会结束。但是,我看到了(0 1 2 3 ...。
(iterate inc 0) 生成永不返回的无限序列。如果它永远不会结束,那为什么println 开始打印值?
换句话说,为什么即使输入从未完成评估,(println xx) 也会开始评估?
【问题讨论】:
-
println在打印之前不需要实现整个序列,它是按需实现的。 “永远不会回来”。出于同样的原因,(first (iterate inc 0))会返回给您0。