Cont

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.