Home > Net >  Recursing over a List: why base case is Nil, not List(Nil)
Recursing over a List: why base case is Nil, not List(Nil)

Time:03-27

I'm trying to recurse over a list like this (which works):

def sumList(lst: List[Int]): Int = lst match {
  case Nil       => 0
  case n :: rest => n   sumList(rest)
}

However, I don't understand why base case is Nil, not List(Nil).

(I've seen in some answers that Nil represents empty list but:

scala> List(Nil) == Nil
val res0: Boolean = false

)

CodePudding user response:

Nil does not represent a missing value or null, it is a value that represents an empty list. It can equivalently be expressed List(). List(Nil) is a list that contains an empty list.

CodePudding user response:

val x = List()
val y = Nil
println(x == y) //true

In some cases, you must write the type (e.g., Nil: List[Int]) when writing Nil.

  • Related