gpt4 book ai didi

clojure - (println(迭代公司0)): why does this even start printing?

转载 作者:行者123 更新时间:2023-12-03 00:06:47 25 4
gpt4 key购买 nike

当我在 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) 也会开始评估?

最佳答案

您应该阅读 lazy seqs在 Clojure 中。它们能够生成可在实现整个序列之前增量消耗的值(在这种情况下,这永远不会发生)。

将其视为推与拉可能会有所帮助。与其迭代创建整个值列表,然后将它们推送到 println 函数(这永远不会发生),迭代只是将其传递给它一个惰性序列,然后 println 在需要时提取值。这就是 (take 5 (iterate inc 0)) 有效的原因; take 在停止之前仅尝试提取 5 个值。

关于clojure - (println(迭代公司0)): why does this even start printing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com