我怎么知道一个表达式是否是一个延续?

How do I know whether an expression is a continuation?

(+ 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 document 我试着去查了一下,但是很难理解。

在这个表达式中:

(let/cc cont body ...)

cont 是一个 continuation (+ 2 _),在正文中你这样做:

(set! global-cont cont)

所以基本上你是将 cont 分配给 global-cont,使其成为一个延续。

我想我不同意"the whole block (+ 2 ...) is a continuation"。如果 "continuation" 你的意思是 "a value captured by let/cc or its equivalent (call/cc etc.)," 那么整个块不是一个延续。

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