Step through a sequence with positions.

indexed-step `zipWithIndex` pairs each element with its position. Iterating those pairs steps through the sequence while tracking where each element sits.

Indexed Stepping

start
IndexedStep.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val start = 0
    val items = List("a", "b", "c")
    var log = ""
    for ((item, idx) <- items.zipWithIndex) {
      log = log + (idx + start) + ":" + item + " "
    }

    println("log=" + log.trim)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val start = 1
    val items = List("a", "b", "c")
    var log = ""
    for ((item, idx) <- items.zipWithIndex) {
      log = log + (idx + start) + ":" + item + " "
    }

    println("log=" + log.trim)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val start = 2
    val items = List("a", "b", "c")
    var log = ""
    for ((item, idx) <- items.zipWithIndex) {
      log = log + (idx + start) + ":" + item + " "
    }

    println("log=" + log.trim)
  }
}
  1. start ← 0, items ← List(a, b, c), log ← (empty)

    1object Main {2  def main(args: Array[String]): Unit = {3    val start→ 0 = 0 //@start=1, 24    val items→ List(a, b, c) = List("a", "b", "c")5    var log→ (empty) = ""6    for ((item, idx) <- items.zipWithIndex) {7      log = log + (idx + start) + ":" + item + " "
  2. log ← 0:a

    pass 1 of 3
    5var log = ""6for ((itema, idx0) <- items.zipWithIndexList((a,0), (b,1), (c,2))) {7  log→ 0:a  = log + (idx0 + start0) + ":" + itema + " "8}
    All 3 passes — pass 1 is the card above
    passitemidxlog
    1a0(empty) 0:a
    2b10:a 0:a 1:b
    3c20:a 1:b 0:a 1:b 2:c
  3. println("log=" + log.trim)

    10    println("log=" + log.trim0:a 1:b 2:c)11  }12}
    outputlog=0:a 1:b 2:c
  1. start ← 1, items ← List(a, b, c), log ← (empty)

    1object Main {2  def main(args: Array[String]): Unit = {3    val start→ 1 = 14    val items→ List(a, b, c) = List("a", "b", "c")5    var log→ (empty) = ""6    for ((item, idx) <- items.zipWithIndex) {7      log = log + (idx + start) + ":" + item + " "
  2. log ← 1:a

    pass 1 of 3
    5var log = ""6for ((itema, idx0) <- items.zipWithIndexList((a,0), (b,1), (c,2))) {7  log→ 1:a  = log + (idx0 + start1) + ":" + itema + " "8}
    All 3 passes — pass 1 is the card above
    passitemidxlog
    1a0(empty) 1:a
    2b11:a 1:a 2:b
    3c21:a 2:b 1:a 2:b 3:c
  3. println("log=" + log.trim)

    10    println("log=" + log.trim1:a 2:b 3:c)11  }12}
    outputlog=1:a 2:b 3:c
  1. start ← 2, items ← List(a, b, c), log ← (empty)

    1object Main {2  def main(args: Array[String]): Unit = {3    val start→ 2 = 24    val items→ List(a, b, c) = List("a", "b", "c")5    var log→ (empty) = ""6    for ((item, idx) <- items.zipWithIndex) {7      log = log + (idx + start) + ":" + item + " "
  2. log ← 2:a

    pass 1 of 3
    5var log = ""6for ((itema, idx0) <- items.zipWithIndexList((a,0), (b,1), (c,2))) {7  log→ 2:a  = log + (idx0 + start2) + ":" + itema + " "8}
    All 3 passes — pass 1 is the card above
    passitemidxlog
    1a0(empty) 2:a
    2b12:a 2:a 3:b
    3c22:a 3:b 2:a 3:b 4:c
  3. println("log=" + log.trim)

    10    println("log=" + log.trim2:a 3:b 4:c)11  }12}
    outputlog=2:a 3:b 4:c