gpt4 book ai didi

clojure - 为什么仅由惰性函数调用组成的 Clojure 函数也不是惰性函数?

转载 作者:行者123 更新时间:2023-12-04 17:38:15 25 4
gpt4 key购买 nike

Clojure 函数

(reductions + 0 (cycle [1 1 -1]))

产生一个序列 [0 1 2 1 2 3 2 3 4 3 4 5 ...]。不幸的是,这个序列不是懒惰的。

cycle reductions 都记录为返回惰性序列,我希望这些函数的这种组合也返回惰性序列。为什么不这样做,我该如何修复它以懒惰地返回序列?

显示相同问题的更复杂示例:
(reductions (fn [x f] (f x)) 0 (cycle [inc inc dec]))

(我展示了这个,因为这是我最终希望使用的那种版本,以防万一)

最佳答案

Unfortunately, this sequence isn't lazy.



哦,是的,是的。我们可以通过取前 10 个元素来快速检查它是否是惰性的:
(take 10 (reductions + 0 (cycle [1 1 -1])))

这很快就会返回一个答案,这证明该序列是惰性的。如果函数不是懒惰的,它会尝试实现无限序列中的所有元素,并且会炸毁内存,或者卡在无限循环中。

发生的情况是您在 REPL 中键入此 func,它会在向您展示之前尝试实现该序列。

编辑:将此提示用于 stop infinite loops如果您发现自己触发了一个或不小心尝试实现无限序列。

关于clojure - 为什么仅由惰性函数调用组成的 Clojure 函数也不是惰性函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386401/

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