计算机缩写之 Call/CC

Catalogue

call/cccall with current continuation,完整的定义是

captures the current continuation, and applies its argument to this continuation

continuation 就是程序剩下的部分,举个例子,对于表达式 (+ 4 (+ 1 2)) 来说,(+ 1 2) 这个的剩下来就是如下

1
(lambda (v) (+ 4 v))

对于 4 来说,剩下来就是

1
(lambda (v) (+ v (+ 1 2)))

那这个 call/cc 的定义是

1
2
(... (call/cc (lambda (cc) 
(<body>))) ...)

body 是指当前 continuationcc 就是某个函数。


回到抽象定义来 (call/cc f) ,接受一个 f 而这个 f 的实参是 continuation
比如说 ((call/cc f) e2) 对于 f 接受是 continuation,假设当前的 continuation 是一个 c
那么current continuation(lambda (c) (c e2)) 这个对于 e2 来说的,加上 f 就会变成 (f (lambda (c) (c e2)))