Why does this list mean it has 3 or 3 elements in scala

why does this list mean it has 3 or 3 elements in scala

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

      

maybe x, y or ys, zs is empty? why should it be a list of at least 3 items according to the teacher

Thank!

+3


source to share


2 answers


Let this expression express some context that makes the types explicit.

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

      

Usually, if you have identifiers x

and xs

, then it xs

will have a collection type (for example, List[A]

), and x

will have a collection item type (for example, A

). This is not the case here, so I think your teacher made it more difficult than necessary by naming the variables the least.



Now, for example, call foo

with the highest possible values:

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

      

+1


source


First, consider an operation ::

that is right-associative. Given a :: as

, add the element a

to List

as

, focusing on the element...

If we want to break this expression, the elements of this list will be ...

  • Element x

  • Element y

  • Element List(xs::ys)

  • Tail zs



As you can see, this expression does not concatenate lists xs

, ys

and zs

, but instead creates an element with List(xs::ys)

and adds it to zs

.

This ensures that the three-item list: x

, y

and List(xs::ys)

. The tail zs

can be either a list or Nil

(empty List

), this expression will contain at least 3 elements.

So the next question is what type of this List

?

0


source







All Articles