Zero Calorie Drink Shop

PFPL 笔记 - X Exceptions and Continuations

笔记 10 异常和 continuations

该章节由我在 PL 读书会上讲解。 Presentation slides: pfpl-10.pdf

Control Stack

第一章给出了 Control Stack 的概念,记录当前 evaluation context 的栈

kek \triangleright e 表示当前栈 kk 将要计算一个表达式 ee, 而 kvk \triangleleft v 表示当前栈 kk 将要返回一个值 vv.

Exceptions

Exceptions 被定义为一种特殊的 value,当一个 exception 被抛出时,当前的 control stack 会被一路弹栈,并且寻找最近的 handler 来处理这个 exception.

Continuation

Continuation 是允许我们直接捕获和复制当前的 control stack,把 stack kk 变成一个 first-class 的值 kcontk \text{cont}.

call/cc

call/cc 是一个高阶函数,接受一个函数作为参数,这个函数接受一个 continuation 作为参数,并且返回一个值.

(call/cc (lambda (k) e))

call/cc 本质上就是书中介绍的 letcc k in e,它会把当前的 control stack 捕获并且传递给参数函数.