Higher-Order Functions
Folding a List
Combine list elements into a single total.
fold-sum
`foldLeft` starts from a seed and combines it with each element in turn. Here it adds the numbers into a running total.
Folding a List
FoldSum.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val seed = 0
val nums = List(1, 2, 3, 4)
val total = nums.foldLeft(seed)((acc, n) => acc + n)
println("seed=" + seed)
println("total=" + total)
}
}
object Main {
def main(args: Array[String]): Unit = {
val seed = 10
val nums = List(1, 2, 3, 4)
val total = nums.foldLeft(seed)((acc, n) => acc + n)
println("seed=" + seed)
println("total=" + total)
}
}
object Main {
def main(args: Array[String]): Unit = {
val seed = 100
val nums = List(1, 2, 3, 4)
val total = nums.foldLeft(seed)((acc, n) => acc + n)
println("seed=" + seed)
println("total=" + total)
}
}
seed ← 0, nums ← List(1, 2, 3, 4), total ← 10
1object Main {2 def main(args: Array[String]): Unit = {3 val seed→ 0 = 0 //@seed=10, 1004 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val total→ 10 = numsList(1, 2, 3, 4).foldLeft(seed0)((acc, n) => acc + n)67 println("seed=" + seed0)8 println("total=" + total10)9 }10}outputseed=0 total=10
seed ← 10, nums ← List(1, 2, 3, 4), total ← 20
1object Main {2 def main(args: Array[String]): Unit = {3 val seed→ 10 = 104 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val total→ 20 = numsList(1, 2, 3, 4).foldLeft(seed10)((acc, n) => acc + n)67 println("seed=" + seed10)8 println("total=" + total20)9 }10}outputseed=10 total=20
seed ← 100, nums ← List(1, 2, 3, 4), total ← 110
1object Main {2 def main(args: Array[String]): Unit = {3 val seed→ 100 = 1004 val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5 val total→ 110 = numsList(1, 2, 3, 4).foldLeft(seed100)((acc, n) => acc + n)67 println("seed=" + seed100)8 println("total=" + total110)9 }10}outputseed=100 total=110