Scala: Using List class foldLeft and foldRight methods

An example of using List class foldLeft method (documentation):

val l1: Int = List(1,2,3).foldLeft(20)((a, b) => a + b) = ((20 + 1) + 2) + 3 = 26 

foldLeft calculation starts from the initial value 20, consecutively iterates over all list elements, from the leftmost to the rightmost, adding the preceding iteration result to the list current element value.

Step 0. Calculation starts from the initial value 20

Step 1. a is equal to 20 (the initial value), b is equal to 1 (the list first element value), so (a + b) = (20 + 1) produces 21

Step 2. a is equal to 21 (the first step result), b is equal to 2 (the list second element value), so (a + b) = (21 + 2) produces 23

Step 3. a is equal to 23 (the second step result), b is equal to 3 (the list third element value), so (a + b) = (23 + 3) produces 26

Wildcard operators can be used in foldLeft. The expression above can also be written as follows:

val l1: Int = List(1,2,3).foldLeft(20)(_ + _)

An example of using List class foldRight method (documentation):

val l2: Int = List(1,2,3).foldRight(20)((a, b) => a - b) = 1 - (2 - (3 - 20) = -18

foldRight calculation starts from the initial value 20, consecutively iterates over all list elements, from the rightmost to the leftmost, subtracting the preceding iteration result from the list current element value.

Step 0. Calculation starts from the initial value 20

Step 1. a is equal to 3 (the list last element value), b is equal to 20 (the initial value), so (a – b) = (3 – 20) produces -17

Step 2. a is equal to 2 (the list second element value), b is equal to -17 (the first step result), so (a – b) = (2 – (-17)) produces 19

Step 3. a is equal to 1 (the list first value), b is equal to 19 (the second step result), so (a – b) = (1 – 19) produces -18

As with foldLeft, wildcard operators can be used in foldRight. So, the expression above can also be written as follows:

val l2: Int = List(1,2,3).foldRight(20)(_ - _)