gpt4 book ai didi

Scala Stream 按需调用(懒惰)与按名称调用

转载 作者:行者123 更新时间:2023-12-04 15:45:34 29 4
gpt4 key购买 nike

所以我知道按需求调用只是按名称调用的内存版本。在 Martin Odersky 在 Coursera 上的 FP 类(class)的第 7.3 课(惰性评估)中,他提到如果使用按名称调用来实现 Streams,那么它可能会导致计算复杂性激增。

这种爆炸的例子是什么?

直呼:

def cons[T](hd: T, tl: => Stream[T]) = new Stream[T] {
def head = hd
def tail = tl
...
}

按需调用:
def cons[T](hd: T, tl: => Stream[T]) = new Stream[T] {
def head = hd
lazy val tail = tl
...
}

最佳答案

例如斐波那契数列,通过添加前两个元素形成后继来实现。如果没有内存,序列的长度会线性放缓(和堆栈增长):

scala> lazy val fib: Stream[Int] = Stream.cons(0,
| Stream.cons(1, fib.zip(fib.tail).map(p => p._1 + p._2)))
fib: Stream[Int] = Stream(0, ?)

this blog 延迟复制的示例 (-sic-)

关于Scala Stream 按需调用(懒惰)与按名称调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407025/

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