/:
è un sinonimo di foldLeft
e :\
per foldRight
.
Ma ricorda che :
si applica all'oggetto a destra di esso /:
.
si Supponendo sanno che (_ * _)
è una funzione anonima che è equivalente a (a, b) => a * b
, e la firma di foldLeft e foldRight sono
def foldLeft [B] (z: B)(f: (B, A) ⇒ B): B
def foldRight [B] (z: B)(f: (A, B) ⇒ B): B
vale a dire che sono funzioni al curry che assumono un valore iniziale e una funzione che unisce il valore iniziale/accumulatore con un elemento dall'elenco, alcuni esempi sono:
List(1,2,3).foldLeft(1)(_*_)
che è la stessa come
(1 /: List(1,2,3))(_*_)
E
List(1,2,3).foldRight(1)(_*_)
in notazione infissa è
(List(1,2,3) foldRight 1)(_*_)
, che è lo stesso di
(List(1,2,3) :\ 1)(_*_)
Aggiungi le tue raccolte e funzioni e godere!
La cosa da ricordare con il corto (/:
e :\
) notazioni è che, perché si sta utilizzando i notazione infissa è necessario mettere parentesi intorno alla prima parte in modo che esso per prendere la seconda lista di argomenti in modo corretto. Inoltre, ricorda che le funzioni di foldLeft e foldRight sono opposte, ma ha senso se stai visualizzando la piega nella tua testa.
fonte
2011-09-07 20:04:03
Nota anche come piega a sinistra (piega), piega a destra (piega) e piega qualsiasi (??). Wikipedia ha alcune informazioni generali e belle immagini su [fold hofs] (http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29). –