递归列表:为什么基本情况是 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])
我正在尝试递归这样的列表(有效):
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])