为什么这个列表意味着它在scala中有3或3个元素
x::y::List(xs::ys)::zs
x,y或ys,zs可以为空吗? 为什么它必须是一个列表至少3个元素根据老师
谢谢!
答案 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
按照惯例,如果您有标识符x
和xs
,那么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
正如您所看到的,此表达式不会连接列表xs
,ys
和zs
,而是创建一个List(xs::ys)
和{pre}的元素它到zs
。
这可确保列表中的三个元素为x
,y
和List(xs::ys)
。尾部zs
可以是列表,也可以是Nil
(空List
),此表达式至少包含3个元素。
那么,接下来的问题是这个List
的类型是什么?