List head and tail
Here is the simplest List
method that gets the first element, that is, head
of the list:
scala> def head[A](list: List[A]): A = list match { | case Nil => sys.error("tail of empty list") | case ::(x, _) => x | } head: [A](list: ch02.mylist.List[A])A
We perform a pattern match on the list. The first clause case Nil => sys.error("tail of empty list")
matches when the list is empty. An empty list will not have a first element so we raise an exception:
case ::(x, _) => x
This clause matches when there are one or more elements in the list.
The following diagram shows how the pattern match works:
We usually write the second clause as follows:
case x :: _ => x
This reads better. The expression  ::(x, _)
can always be written in infix notation as x :: _
. See http://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html
for more information. Here is the revised head
method...