我如何知道一个表达式是否是延续


(+ 2 (let/cc cont
(begin
(set! global-cont cont)
3)))
5
global-cont
#<continuation>
(global-cont 5) ; global-cont: (+ 2 _)
7

我知道整个区块(+ 2 ... 3)))是一个延续。但为什么global-cont也是一个延续呢?我试着查看let/cc文档,但很难理解。

在此表达式中:

(let/cc cont body ...)

cont(+ 2 _)的延续,在体内你正在这样做:

(set! global-cont cont)

所以基本上,你把cont分配给global-cont,使它也是一个连续。

我不同意"整个块(+2…(是一个延续"。如果"continuation"的意思是"由let/cc或其等价物(call/cc等(捕获的值",那么整个块就不是continuation。

所以:cont是一个延续,因为你用let/cc捕捉到了它。global-cont是一个延续,因为您为它分配了一个延续。

相关内容

最新更新