Scala Reduce vs Fold
There is only a subtle difference between reduce
and fold
. Fold requires an initial value, whereas reduce doesn’t need one.
Reduce example:
scala> (1 to 10).reduce(_ * _)
val res0: Int = 3628800
Fold example:
scala> (1 to 10).fold(0)(_ * _)
val res0: Int = 0
scala> (1 to 10).fold(1)(_ * _)
val res1: Int = 3628800
This is because reduce
requires the operator to be both commutative and associative, whereas fold
requires the operator to be associative only.
A reminder of some basic arithmetics concepts:
Commutative property: \[ a + b = b + c \]
Associative property: \[ (a + b) + c= a + (b + c) \]