Compute values across a numeric range.

range-comprehension A `for` over a range like `1 to stop` yields one result per number. Here it collects the squares into a new list.

Range Comprehension

stop
RangeComprehension.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val stop = 3
    val squares = for (i <- 1 to stop) yield i * i
    val text = squares.mkString(",")

    println("count=" + squares.length)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val stop = 4
    val squares = for (i <- 1 to stop) yield i * i
    val text = squares.mkString(",")

    println("count=" + squares.length)
    println("text=" + text)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val stop = 5
    val squares = for (i <- 1 to stop) yield i * i
    val text = squares.mkString(",")

    println("count=" + squares.length)
    println("text=" + text)
  }
}
  1. stop ← 3, squares ← Vector(1, 4, 9), text ← 1,4,9

    1object Main {2  def main(args: Array[String]): Unit = {3    val stop→ 3 = 3 //@stop=4, 54    val squares→ Vector(1, 4, 9) = for (i <- 1 to stop3) yield i * i5    val text→ 1,4,9 = squaresVector(1, 4, 9).mkString(",")67    println("count=" + squares.length3)8    println("text=" + text1,4,9)9  }10}
    outputcount=3
    text=1,4,9
  1. stop ← 4, squares ← Vector(1, 4, 9, 16), text ← 1,4,9,16

    1object Main {2  def main(args: Array[String]): Unit = {3    val stop→ 4 = 44    val squares→ Vector(1, 4, 9, 16) = for (i <- 1 to stop4) yield i * i5    val text→ 1,4,9,16 = squaresVector(1, 4, 9, 16).mkString(",")67    println("count=" + squares.length4)8    println("text=" + text1,4,9,16)9  }10}
    outputcount=4
    text=1,4,9,16
  1. stop ← 5, squares ← Vector(1, 4, 9, 16, 25), text ← 1,4,9,16,25

    1object Main {2  def main(args: Array[String]): Unit = {3    val stop→ 5 = 54    val squares→ Vector(1, 4, 9, 16, 25) = for (i <- 1 to stop5) yield i * i5    val text→ 1,4,9,16,25 = squaresVector(1, 4, 9, 16, 25).mkString(",")67    println("count=" + squares.length5)8    println("text=" + text1,4,9,16,25)9  }10}
    outputcount=5
    text=1,4,9,16,25