3.3

Using the same idea, implement the function setHead for replacing the first element of a List with a different value.

Solution

def setHead[A](l: List[A], h: A): List[A] = l match {
    case Nil => Nil
    case Cons(_, tail) => Cons(h, tail)
  }

Run

object Solution extends App {
  import List._

  println("setHead List(1,2,3,4), 0: " + List.setHead(List(1,2,3,4),0))
  println("setHead List(1), 0: " + List.setHead(List(1),0))
  println("setHead List(), 0: " + List.setHead(List(),0))
  println("setHead Nil, 0: " + List.setHead(Nil,0))
}

Output

setHead List(1,2,3,4), 0: Cons(0,Cons(2,Cons(3,Cons(4,Nil))))
setHead List(1), 0: Cons(0,Nil)
setHead List(), 0: Nil
setHead Nil, 0: Nil