Week 3 Code Snippets

Execution of Foreach

def foreach (xs:List[Int], f:Int=>Unit) : Unit = xs match
  case Nil   => ()
  case y::ys =>
    f (y)
    foreach (ys, f)

foreach (List(11,21), println)
==>
xs match
  case Nil   => ()
  case y::ys =>
    f (y)
    foreach (ys, f)
// xs == List(11,21) == 11 :: (21 :: Nil)
//  f == println
==>
11 :: (21 :: Nil) match
  case Nil   => ()
  case y::ys =>
    println (y)
    foreach (ys, println)
==>
    println (y)
    foreach (ys, println)
//  y == 11
// ys == List(21) == 21 :: Nil
==>
    println (11)
    foreach (List(21), println)
==>
    // prints "11"
==>
    foreach (List(21), println)
==>
xs match
  case Nil   => ()
  case y::ys =>
    f (y)
    foreach (ys, f)
// xs == List(21) == 21 :: Nil
//  f == println
==>
21 :: Nil match
  case Nil   => ()
  case y::ys =>
    println (y)
    foreach (ys, println)
==>
    println (y)
    foreach (ys, println)
//  y == 21
// ys == List() == Nil
==>
    println (21)
    foreach (Nil, println)
==>
    // prints "21"
==>
    foreach (Nil, println)
==>
xs match
  case Nil   => ()
  case y::ys =>
    f (y)
    foreach (ys, f)
// xs == List() == Nil
//  f == println
==>
Nil match
  case Nil   => ()
  case y::ys =>
    println (y)
    foreach (ys, println)
==>
()