作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我知道按需求调用只是按名称调用的内存版本。在 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, ?)
关于Scala Stream 按需调用(懒惰)与按名称调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407025/
我是一名优秀的程序员,十分优秀!