【发布时间】:2020-12-28 22:49:05
【问题描述】:
假设我们有以下 LazyList 定义:
val fibs: LazyList[BigInt] = BigInt(0) #:: BigInt(1) #::
fibs.zip(fibs.tail).map(pair => pair._1 + pair._2)
我的问题是它是如何执行的,因为这个定义说我们取尾部并为每一对(来自 zip)进行计算。但是,如果我们想计算索引为 10 的元素,我们已经有了 ...8、9 的值。所以问题是......这是以某种方式优化的,还是对于每个下一个元素,我们都会遍历所有对?
【问题讨论】:
-
您可以在
map中添加println进行检查。 LazyLists 被记忆,它们记住已经计算过的元素。 -
ScalaDocs page 使用相同的
fibs()算法非常详细地说明了记忆化、抓住头部、无限回归、不变性等概念,以及它们如何应用于@ 987654326@。答案是肯定的,只要有东西占据列表的头部,就会发生记忆。 -
@jwvh 好的,这将是一个答案!
标签: scala