J'essaie d'apprendre la programmation fonctionnelle et Scala, donc je lis la "Programmation fonctionnelle en Scala" par Chiusano et Bjarnason. J'ai de la difficulté à comprendre ce que les méthodes de pli gauche et pli droit font en cas de liste. J'ai regardé autour d'ici mais je n'ai pas trouvé quelque chose de débutant amical. Ainsi, le code fourni par le livre est:Scala plier à droite et plier à gauche
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)
}
Où Cons et Nil sont:
case class Cons[+A](head: A, tail: List[A]) extends List[A]
case object Nil extends List[Nothing]
Alors qu'est-ce pli effectivement gauche et à droite faire? Pourquoi sont nécessaires en tant que "utilité" des méthodes? Il y a beaucoup d'autres méthodes qui les utilisent et j'ai du mal à les comprendre aussi, puisque je ne comprends pas ces deux-là.
jetez un oeil à la discussion suivante. http://stackoverflow.com/questions/24370549/foldleft-v-foldright-does-it-matter Il y a beaucoup d'informations concernant ces opérations. On dirait un doublon pour moi. – Pavel
Dans cette question, il semble que l'utilisateur demandant a une très bonne compréhension de l'affaire, je ne sais pas, ce qui est ce que je veux aider. – jrsall92
Pour le code que vous avez fourni. Avez-vous une question spécifique? Qu'est-ce qui crée exactement une difficulté? syntaxe? La clé pour comprendre la différence est la façon dont l'appel récursif se fait dans les deux cas. C'est différent. Lisez à propos de la récursivité de la queue. J'espère que cela aidera. Plus de liens: https://oldfashionedsoftware.com/2009/07/10/scala-code-review-foldleft-and-foldright/ – Pavel