Я пытаюсь изучить функциональное программирование и Scala, поэтому я читаю «Функциональное программирование в Scala» от Chiusano и Bjarnason. У меня возникли проблемы с пониманием того, что складывается влево и сбрасывать правильные методы в случае списка. Я осмотрелся здесь, но я не нашел что-то новичка. Таким образом, код, предоставляемый книги: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)
}
Где Cons и Nil являются:
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