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)
==>
()