2016-05-16 1 views
0

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

+1

Quelles réponses vous ne comprenez pas? Que comprenez-vous de foldLeft et foldRight? Qu'entendez-vous par "pont"? – pedrofurla

+0

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

+0

@pedrofurla, si c'est comme l'autre question, il s'agit d'implémenter foldLeft en termes de foldRight (et vice versa) –

Répondre

1

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

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

+0

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