递归列表:为什么基本情况是 Nil,而不是 List(Nil)

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

我正在尝试递归这样的列表(有效):

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

但是,我不明白为什么基本情况是 Nil,而不是 List(Nil)

(我在一些答案中看到 Nil 代表空列表但是:

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

)

Nil不代表缺失值或null,它是一个代表空列表的值。可以等价地表示为List()List(Nil) 是一个包含空列表的列表。

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

有些情况下,写Nil时必须写类型(如Nil:List[Int])