2016-05-16 9 views
0

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

+1

Welche Antworten Sie nicht verstehen? Was verstehst du von foldLeft und foldRight? Was meinst du mit "Brücke"? – pedrofurla

+0

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 –

+0

@pedrofurla, wenn es wie die andere Frage ist, es geht darum, foldLeft in Bezug auf foldRight zu implementieren (und umgekehrt) –

Antwort

1

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 opresult 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) 
+0

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. –

+0

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. –

Verwandte Themen