Правильный ответ на пятничный вопрос - start start start i0 i1 i2
. Сам результат при этом не так интересен, как приводящая к нему логика исполнения программы. Чтобы её увидеть, можно добавить в код дополнительные отладочные выражения. Обратите внимание, что написать println("end")
в конце нельзя, так как тип результата блока reset
согласован с типом функции f
.
val x = reset {Cоответствующий вывод в консоль:
def iterate(n: Int) = shift { f: (Int => Int) =>
println(s"start $n")
val x = f(0)
println(s"got back to $n - got res $x")
println(s"ran $x")
x + 1
}
println("pre-start 0")
iterate(0)
println("pre-start 1")
iterate(1)
println("pre-start 2")
val res = iterate(2)
println("end")
res
}
println(x)
pre-start 0
start 0
pre-start 1
start 1
pre-start 2
start 2
end
got back to 2 - got res 0
ran 0
got back to 1 - got res 1
ran 1
got back to 0 - got res 2
ran 2
3
>>Click here to continue<<