表达式之后还剩什么
计算一个嵌套表达式时,得到内部结果后,外部可能还要进行加法、调用函数或返回输出。延续就是对这部分“接下来做什么”的表示。例如某个位置的结果还需加二再乘三,它的求值上下文便包含这些尚待完成的步骤,而不只是当前正在计算的数值。
参考:[1]
把执行上下文保存为值
Scheme的call-with-current-continuation把当前延续交给一个过程,程序可以保存它,并在以后用一个值调用。调用所保存的延续会让这个值进入原先等待结果的位置。这并不是重新读取源文件,也不等同于保存所有外部世界状态;数据库或文件已经发生的修改不会因此自动撤销。
参考:[2]
非局部退出的一种基础
当深层计算发现无需继续的情况时,可以用预先取得的延续直接返回外层所需的结果,而不必逐层传递特别标志。R5RS列出从遍历中退出等例子,并允许保存的延续像其他过程一样长期存在。不过,不同控制运算子对恢复和组合的行为可能不同,不能把它们一概看成普通函数返回。
给捕获的范围设置边界
Racket用提示符界定可以捕获到哪里,并区分可组合延续与先中止当前上下文再恢复的操作。边界让程序能够只保存执行环境的一部分,而不是笼统接管整个未来。理解一种延续机制,需要同时说明捕获范围、调用方式以及动态控制环境,才能判断代码恢复后究竟从哪里继续。
参考:[1]