There is only a subtle difference between
fold. Fold requires an initial value, whereas reduce doesn’t need one.
scala> (1 to 10).reduce(_ * _) val res0: Int = 3628800
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) \]