为什么这个列表意味着它在scala中有3或3个元素

时间:2014-10-08 05:41:18

标签: list scala

为什么这个列表意味着它在scala中有3或3个元素

x::y::List(xs::ys)::zs

x,y或ys,zs可以为空吗? 为什么它必须是一个列表至少3个元素根据老师

谢谢!

2 个答案:

答案 0 :(得分:1)

让我们给这个表达式一些使类型显式的上下文。

def foo[A](
  x: List[List[A]],
  y: List[List[A]],
  xs: A,
  ys: List[A],
  zs: List[List[List[A]]]
): List[List[List[A]]] =
  x::y::List(xs::ys)::zs

按照惯例,如果您有标识符xxs,那么xs会有一个集合类型(例如List[A]),而x将属于集合的元素类型(例如A)。这不是这里的情况,所以我认为你的老师通过很好地命名变量使得这比必要更困难。

现在,例如,让我们使用尽可能少的值调用foo

> foo(Nil, Nil, 1, Nil, Nil)
res: List[List[List[Int]]] = List(List(), List(), List(List(1)))

答案 1 :(得分:0)

首先让我们理解::操作,它是右关联操作。给定a :: as,将 元素 a附加到List as,强调 元件 即可。

如果我们要分解这个表达式,这个列表的元素将是......

  • 元素x
  • 元素y
  • 元素List(xs::ys)
  • 尾巴zs

正如您所看到的,此表达式不会连接列表xsyszs,而是创建一个List(xs::ys)和{pre}的元素它到zs

这可确保列表中的三个元素为xyList(xs::ys)。尾部zs可以是列表,也可以是Nil(空List),此表达式至少包含3个元素。

那么,接下来的问题是这个List的类型是什么?