# Creating Sequences

The standard library in Scala contains many types of sequence: mutable and immutable, lazy and eager, parallel and sequential. In this course we will use two types of sequence: Lists and Ranges. Both are simple, immutable, eager data types. Let's see them in action.

We can create a list in Scala by calling the List factory method as follows:

List(1, 2, 3, 4, 5)
// res0: List[Int] = List(1, 2, 3, 4, 5)

The result of the expression is of type List[Int], which we read as "list of integers". If we call the factory method with String arguments, the type of the result changes accordingly:

List("a", "b", "c", "d", "e")
// res1: List[String] = List(a, b, c, d, e)

Lists are useful for storing short sequences of values. If we want to create long sequences of numbers, however, we are better off using Ranges. We can create these using the until method of Int or Double:

0 until 10
// res0: scala.collection.immutable.Range.Inclusive =
//   Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

0.0 until 5.0
// res1: scala.collection.immutable.Range.Inclusive =
//   Range(0.0, 1.0, 2.0, 3.0, 4.0)

Ranges have a by method that allows us to change the step between consecutive elements of the range:

0 until 10 by 2
// res1: scala.collection.immutable.Range.Inclusive =
//   Range(0, 2, 4, 6, 8)

0.0 until 1.0 by 0.3
// res2: scala.collection.immutable.Range.Inclusive =
//   Range(0.0, 0.3, 0.6, 0.9)

Many methods in Doodle are designed to work with Lists and Ranges, but you can use the toList of any Range to convert it to a List if you run into problems:

(0 until 10).toList
// res0: List[Int] =
//   List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

Let's see what we can do with these sequences.