19. 継 続 の 生 成 ( 単 純 化 し た も の )
• 式 Expr
• 式の評価 eval : Expr → Res ― 厳密には環境も必要
• 評価結果 Res = Ok Val ― 成功
| Cont Val (Res → Res) ― 継続
| Next Val ― 評価終了
20. 継 続 の 生 成
• 例えば、複数の式を順番に評価するような式
e = (e1 : Expr, e2 : Expr, ..., eN : Expr) : Expr
r = eval e, ri = eval ei ― 評価結果
• ri = Ok v ei+1 以降の評価を続ける, i = N ならば r = Ok v
• Cont f c r = Cont f ((λx → eval ([r1, ..., ri-1,] x, ei+1, ..., eN)) ○ c)
• Next v r = Next v
21. 継 続 の 生 成
• トップレベルには中身の式の評価結果が Ok v ならば
Next v となる式を置いておく
• eval “(call/cc f)” = Cont f (λx → x)
• (call/cc f) を含む式を評価すると Cont f c が得られる
• 最後に c (f c) を計算すれば (そのうち) 値が出てくる