を足すための一般的な方法、foldLeft
とfoldRight
という2つの重要な方法があります。ここでfoldRight
スカラ:機能programmmingでfoldLeft
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tails: List[A]) extends List[A]
def foldRight[A, B](ls: List[A], z: B)(f: (A, B) => B): B = ls match {
case Nil => z
case Cons(x, xs) => f(x, foldRight(xs, z)(f))
}
そして、ここでの実装はfoldLeft
の実装である:
@annotation.tailrec
def foldLeft[A, B](ls: List[A], z: B)(f: (B, A) => B): B = ls match {
case Nil => z
case Cons(x, xs) => foldLeft(xs, f(z, x))(f)
}
}
私の質問は:私は多くの文書から読み込まれ、f関数の彼ら頻繁に置くためには、次のとおりです。f: (B, A) => B
の代わりに、 f: (A, B) => B
。なぜこの定義が良いのでしょうか?他の方法で使用すると、foldLeft
と同じシグネチャが適用されるため、より良いでしょう。