3.15. Working with a List in a Match Expression
Problem
You know that a List data
structure is a little different than other collection data structures.
It’s built from cons cells and ends in a Nil element. You want to use this to your
advantage when working with a match expression, such as when writing a
recursive function.
Solution
You can create a List like
this:
valx=List(1,2,3)
or like this, using cons cells and a Nil element:
valy=1::2::3::Nil
When writing a recursive algorithm, you can take advantage of the
fact that the last element in a List
is a Nil object. For instance, in the
following listToString method, if the
current element is not Nil, the
method is called recursively with the remainder of the List, but if the current element is Nil, the recursive calls are stopped and an
empty String is returned, at which
point the recursive calls unwind:
deflistToString(list:List[String]):String=listmatch{cases::rest=>s+" "+listToString(rest)caseNil=>""}
Running this example in the REPL yields the following result:
scala>val fruits = "Apples" :: "Bananas" :: "Oranges" :: Nilfruits: List[java.lang.String] = List(Apples, Bananas, Oranges) scala>listToString(fruits)res0: String = "Apples Bananas Oranges "
The same approach of (a) handling the Nil condition and (b) handling the remainder
of the List can be used when dealing with a List of other types:
defsum(list:List[Int]):Int=listmatch{caseNil=>1casen::rest=>n+sum(rest)}defmultiply ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access