几乎 2 个相同的程序可以生成无限惰性的随机序列。
第一个不会崩溃。第二次崩溃,出现 OutOfMemoryError 异常。为什么?
;Return infinite lazy sequence of random numbers
(defn inf-rand[] (lazy-seq (cons (rand) (inf-rand))))
;Never returns. Burns the CPU but won't crash and lives forever.
(last (inf-rand))
但以下崩溃很快:
;Return infinite lazy sequence of random numbers
(defn inf-rand[] (lazy-seq (cons (rand) (inf-rand))))
(def r1 (inf-rand))
;Crash with "OutOfMemoryError"
(last r1)
我相信这就是一个“抱住头”的例子。
通过在第二个示例中引用 r1,您可以稍后说类似的话(first r1)
所以你最终将存储你的lazy-seq的成员,因为它们被具体化了。
在第一种情况下,Clojure 可以确定不会对无限序列的早期成员执行任何操作,因此可以将它们处理掉而不消耗内存。
我自己仍然是一个 Clojure 初学者,非常感谢对我的理解或术语的任何评论或更正。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)