continuation #
examples #
An expression’s continuation is “the computation that will receive the result of that expression”.
(+ 4 (+ 1 2))
- 对表达式
(+ 1 2)
, continuation 可以表达为(lambda (v) (+ 4 v))
. - 对表达式
4
, continuation 是(lambda (v) (+ v (+ 1 2)))
.
call/cc (call-with-current-continuation) #
用当前(即call/cc表达式位置)的continuation作为参数传入去执行某个函数过程(call/cc的唯一参数)
call/cc 接受一个函数 f 作为参数。call/cc 会:
- 捕获当前的延续性(也就是程序执行到 call/cc 这一步之后剩余的计算)。
- 创建一个新的函数 k,这个 k 函数代表了捕获到的延续性。
- 调用 f,并将 k 作为参数传递给 f
(+ 4 (call/cc
(lambda (k) (k (+ 1 2)))))
REPL 中求值某个表达式 exp, 其 continuation 可以理解为: (lambda (val) (display val))
,其实就是 display
.