【发布时间】:2019-06-02 21:48:47
【问题描述】:
我无法理解 Scala 中 scanRight 函数的以下实现。
def scanRight[B](z: B)(f: (A, => B) => B): Stream[B] =
foldRight((z, Stream(z)))((a, p0) => {
lazy val p1 = p0
val b2 = f(a, p1._1)
(b2, cons(b2, p1._2))
})._2
scanRight 的一个典型应用是
Stream(1, 2, 3).scanRight(0)(_ + _).toList
产生熟悉的List(1+2+3, 1+2, 1, 0)。
特别是,我不明白p0在这里是什么。它似乎是一个元组?但是这个元组是从哪里来的呢?
请注意,此具体实现取自here
谢谢,如果您需要更多信息,请告诉我。
【问题讨论】:
标签: scala collections