14

私は関数型プログラミングと Scala を学ぼうとしているので、Chiusano と Bjarnason による「Functional Programming in 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]

では、実際に左折と右折は何をするのでしょうか? なぜ「ユーティリティ」メソッドとして必要なのですか? それらを使用する他の多くの方法があり、それらの2つを取得できないため、それらも理解するのに苦労しています。

4

2 に答える 2