私は関数型プログラミングとScalaを学びたいので、ChiusanoとBjarnasonの "Functional Programming in Scala"を読んでいます。私は何の折り目が左のリストと折りたたみの正しいメソッドがリストの場合に行うのか理解するのに困っている。私はここを見回しましたが、私は何か初心者フレンドリーではありません。だから、この本が提供するコードは次のとおりです。短所と無記号があるScala fold rightとfold left
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)
}
は:
のでcase class Cons[+A](head: A, tail: List[A]) extends List[A]
case object Nil extends List[Nothing]
実際に左と右の倍何をしますか?なぜ "ユーティリティ"メソッドとして必要なのでしょうか?それを使う方法はほかにもたくさんありますが、私はそれらを理解していないので、理解するのも難しいです。
次のスレッドを見てください。 http://stackoverflow.com/questions/24370549/foldleft-v-foldright-does-it-matterこれらの操作に関する多くの情報があります。私に重複しているように見えます。 – Pavel
その質問では、ユーザーが手元にある問題をかなりよく理解しているように聞いているようですが、私は助けたいものです。 – jrsall92
あなたが提供したコード。具体的な質問はありますか?正確に何が難しいのですか?構文?この違いを理解するための鍵は、どちらの場合でも再帰呼び出しを行う方法です。違います。テール再帰について読む。これが役立つことを願っています。その他のリンク:https://oldfashionedsoftware.com/2009/07/10/scala-code-review-foldleft-and-foldright/ – Pavel