/:
es un sinónimo de foldLeft
y :\
para foldRight
.
Pero recuerde que :
hace /:
aplicar al objeto a la derecha de la misma.
Suponiendo que saben que (_ * _)
es una función anónima que es equivalente a (a, b) => a * b
, y la firma de foldLeft y foldRight son
def foldLeft [B] (z: B)(f: (B, A) ⇒ B): B
def foldRight [B] (z: B)(f: (A, B) ⇒ B): B
es decir, que son funciones al curry que tienen un valor de inicio y una función de la combinación del valor de inicio/acumulador con un elemento de la lista, algunos ejemplos son:
List(1,2,3).foldLeft(1)(_*_)
que es el mismo que
(1 /: List(1,2,3))(_*_)
Y
List(1,2,3).foldRight(1)(_*_)
en notación infija es
(List(1,2,3) foldRight 1)(_*_)
que es el mismo que
(List(1,2,3) :\ 1)(_*_)
Añada sus propias colecciones y funciones y disfrutar!
Lo que hay que recordar a los cortos (/:
y :\
) notaciones es que, debido a que está utilizando las notaciones infijos que necesita para poner paréntesis alrededor de la primera parte con el fin de que para recoger la segunda lista de argumentos correctamente. Además, recuerde que las funciones para foldLeft y foldRight son al revés, pero tiene sentido si está visualizando el pliegue en su cabeza.
También conocido como doblar a la izquierda (pliegue), doblar a la derecha (pliegue) y doblar cualquiera (??). Wikipedia tiene información general e imágenes bonitas sobre [fold hofs] (http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29). –