Je sais, cette question a déjà été posée. Mais je n'ai compris aucune des réponses. Je pense que j'ai besoin d'une explication plus graphique. Je ne peux pas comprendre comment "combler" FoldLeft avec FoldRight. Je m'en fiche si la réponse n'est pas dans la programmation fonctionnelle de Scala. Thabk vous beaucoup d'avance.FoldLeft via FoldRight à Scala à nouveau
Répondre
vérifier Juste comment sont mis en œuvre les:
def foldLeft[B](z: B)(op: (B, A) => B): B = {
var result = z
this foreach (x => result = op(result, x))
result
}
def foldRight[B](z: B)(op: (A, B) => B): B =
reversed.foldLeft(z)((x, y) => op(y, x))
foldLeft
collection de gauche traverse à droite l'application op
à l'élément result
et le courant, alors que foldRight
collection traverse inversée (à savoir de droite à gauche).
Lorsque op
est symétrique et transitive foldLeft
et foldRight
sont équivalentes, par exemple:
List(1,2,3).foldLeft(0)(_ + _)
List(1,2,3).foldRight(0)(_ + _)
Résultat:
res0: Int = 6
res1: Int = 6
Mais autrement foldLeft
et foldRight
peut produire des résultats différents:
List(1,2,3).foldLeft(List[Int]()){case (list, el) => list :+ el }
List(1,2,3).foldRight(List[Int]()){case (el, list) => list :+ el }
Résultat:
res2: List[Int] = List(1, 2, 3)
res3: List[Int] = List(3, 2, 1)
Ce que j'essayais de dire c'est que Je ne comprends même pas ce que signifie «Plier à Gauche dans les termes de Fold Right». Je sais comment ils fonctionnent, mais je ne comprends pas si foldleftviafoldright signifie encapsuler l'un dans l'autre si cela signifie que j'utilise une opération Left To Right mais en utilisant Fold Right. –
De plus, je ne sais pas comment faire ça, eh bien je sais comment le faire, mais je ne le comprends pas très bien. Désolé pour mon wat d'expression, je ne suis pas un anglophone ni programmeur FP. –
Quelles réponses vous ne comprenez pas? Que comprenez-vous de foldLeft et foldRight? Qu'entendez-vous par "pont"? – pedrofurla
Non seulement a-t-il déjà été demandé et répondu, mais il a été demandé ce matin, mais cette question semble avoir été supprimée. Impair. Quoi qu'il en soit, vous devez expliquer de quelle manière les autres sont déficients pour vous, ou cela sera rapidement fermé en tant que doublon. Soit vous êtes le même utilisateur qui a demandé et supprimé l'autre question ou un cours a défini cela comme une affectation. Dans ce dernier cas, vous devriez vraiment essayer quelque chose, et poster quand vous êtes bloqué –
@pedrofurla, si c'est comme l'autre question, il s'agit d'implémenter foldLeft en termes de foldRight (et vice versa) –