【发布时间】:2013-04-30 16:43:55
【问题描述】:
所以我知道按需调用只是按名称调用的记忆版本。在 Martin Odersky 在 Coursera 上的 FP 课程的第 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
...
}
【问题讨论】: