我正在尝试学习函数式编程和 Scala,所以我正在阅读 Chiusano 和 Bjarnason 的“Scala 中的函数式编程”。在列表的情况下,我无法理解向左折叠和向右折叠方法的作用。我环顾四周,但没有找到适合初学者的东西。所以书上提供的代码是:
def foldRight[A,B](as: List[A], z: B)(f: (A, B) => B): B = as match {
case Nil => z
case Cons(h, t) => f(h, foldRight(t, z)(f))
}
def foldLeft[A,B](l: List[A], z: B)(f: (B, A) => B): B = l match {
case Nil => z
case Cons(h,t) => foldLeft(t, f(z,h))(f)
}
Cons 和 Nil 在哪里:
case class Cons[+A](head: A, tail: List[A]) extends List[A]
case object Nil extends List[Nothing]
那么左右折叠实际上是做什么的呢?为什么需要作为“实用”方法?还有许多其他使用它们的方法,我也很难理解它们,因为我不明白这两个。