Ich weiß, diese Frage wurde schon gestellt. Aber ich habe keine der Antworten verstanden. Ich denke, ich brauche eine mehr grafische Erklärung. Ich kann nicht verstehen, wie man FoldLeft mit FoldRight "überbrückt". Es ist mir egal, wenn die anwer nicht in der funktionalen Programmierung in Scala ist. Thabk Sie sehr im Voraus.FoldLeft über FoldRight in Scala wieder
Antwort
einfach überprüfen, wie diejenigen sind implementiert:
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
Sammlung durchläuft von links nach rechts auf das op
result
und Stromelement Anwendung, während foldRight
reversed Sammlung durchläuft (das heißt von rechts nach links).
Wenn op
symmetrisch und transitiv foldLeft
und foldRight
äquivalent sind, zum Beispiel:
List(1,2,3).foldLeft(0)(_ + _)
List(1,2,3).foldRight(0)(_ + _)
Ergebnis:
res0: Int = 6
res1: Int = 6
Aber sonst foldLeft
und foldRight
kann zu unterschiedlichen Ergebnissen führen:
List(1,2,3).foldLeft(List[Int]()){case (list, el) => list :+ el }
List(1,2,3).foldRight(List[Int]()){case (el, list) => list :+ el }
Ergebnis:
res2: List[Int] = List(1, 2, 3)
res3: List[Int] = List(3, 2, 1)
Was ich sagen wollte, ist das Ich verstehe nicht einmal was "Fold Left im Sinne von Fold Right" bedeutet. Ich weiß, wie sie funktionieren, aber ich verstehe nicht, wenn foldleftviafollright bedeutet, eine in eine andere zu kapseln, wenn es bedeutet, dass ich eine Operation von links nach rechts benutze, aber mit Fold Right. –
Außerdem weiß ich nicht, wie man das macht, nun weiß ich, wie man es macht, aber ich verstehe es nicht sehr gut. Entschuldigung für meinen Ausdruck, ich bin kein Englisch-Sprecher oder FP-Programmierer. –
- 1. Wie ein hList auf einem anderen hList mit foldRight/foldLeft
- 2. Scala: fold vs foldLeft
- 3. Verwendung reduceLeft anstelle von foldLeft in scala
- 4. Ist die FoldLeft-Funktion in R verfügbar?
- 5. Scala: Warum foldLeft kann nicht für eine concat von zwei Liste arbeiten?
- 6. Verwenden Sie ein Array als Scala foldLeft Akkumulator
- 7. Übergeben von zusätzlichen Parametern an foldRight
- 8. Warum verursacht das Auslassen des Punktes in foldLeft einen Kompilierungsfehler?
- 9. Faltenoperation in Scala Vs Java 8
- 10. Eine Liste von Strings mit mkString vs foldRight verschmelzen
- 11. Was gibt HList # foldLeft() zurück?
- 12. eine Falte in Scala
- 13. Mapping über Unterlisten in Scala
- 14. Kämme in Scala?
- 15. Unterschied zwischen Punkt und Leerzeichen in Scala
- 16. Gibt es eine elegante Möglichkeit, auf einer wachsenden scala.collections.mutable.Queue foldLeft?
- 17. Warum gibt es keine FoldLeft oder Foreach auf Scalacheck Gen
- 18. Verstehen foldLeft mit Karte statt Liste
- 19. Scala foldLinks auf Karten
- 20. wieder über log4net und Unity IOC config
- 21. wieder öffnen Hintergrundanwendung über Benachrichtigung Artikel
- 22. und wieder über Speicherprobleme mit SoundPool
- 23. Werte aus der Map bekommen Liste der Schlüssel in Scala
- 24. Reassignment zu einem Val in Scala
- 25. Lustige Beobachtung über (rekursive) Strukturtypen in Scala
- 26. Iteration über eine versiegelte Eigenschaft in Scala?
- 27. Iterieren über Java-Sammlungen in Scala
- 28. Scala Iteration über Linien in zwei Dateien
- 29. Warum Tuple über Set in Scala verwenden?
- 30. Kovarianz und die Varianz Flip in scala
Welche Antworten Sie nicht verstehen? Was verstehst du von foldLeft und foldRight? Was meinst du mit "Brücke"? – pedrofurla
Es wurde nicht nur schon gefragt und beantwortet, aber es wurde heute Morgen gefragt, aber diese Frage scheint gelöscht worden zu sein. Ungerade. Wie auch immer, Sie müssen erklären, auf welche Weise die anderen für Sie defizitär sind, oder dies wird schnell als Duplikat geschlossen. Entweder Sie sind derselbe Benutzer, der die andere Frage gestellt und gelöscht hat, oder ein Kurs hat dies als Aufgabe festgelegt. In letzterem Fall solltest du wirklich etwas versuchen und es posten, wenn du feststeckst –
@pedrofurla, wenn es wie die andere Frage ist, es geht darum, foldLeft in Bezug auf foldRight zu implementieren (und umgekehrt) –