Sequences and Lazy Views
Indexed Stepping
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
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)
}
}
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 + " "log ← 0:a
pass 1 of 35var 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 pass itemidxlog1 a 0 (empty) → 0:a 2 b 1 0:a → 0:a 1:b 3 c 2 0:a 1:b → 0:a 1:b 2:c println("log=" + log.trim)
10 println("log=" + log.trim0:a 1:b 2:c)11 }12}outputlog=0:a 1:b 2:c
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 + " "log ← 1:a
pass 1 of 35var 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 pass itemidxlog1 a 0 (empty) → 1:a 2 b 1 1:a → 1:a 2:b 3 c 2 1:a 2:b → 1:a 2:b 3:c println("log=" + log.trim)
10 println("log=" + log.trim1:a 2:b 3:c)11 }12}outputlog=1:a 2:b 3:c
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 + " "log ← 2:a
pass 1 of 35var 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 pass itemidxlog1 a 0 (empty) → 2:a 2 b 1 2:a → 2:a 3:b 3 c 2 2:a 3:b → 2:a 3:b 4:c println("log=" + log.trim)
10 println("log=" + log.trim2:a 3:b 4:c)11 }12}outputlog=2:a 3:b 4:c