У меня проблемы с пониманием следующей реализации функции scanRight
в Scala.
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
здесь. Кажется, это кортеж? Но откуда этот кортеж?
Обратите внимание, что эта конкретная реализация взята из здесь
Спасибо и, пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.