我正在学习延续,但我无法理解这段代码。为什么会进入无限循环?
(let ((cont #f))
(call/cc (lambda (k)
(set! cont k)))
(cont #f))
我正在学习延续,但我无法理解这段代码。为什么会进入无限循环?
(let ((cont #f))
(call/cc (lambda (k)
(set! cont k)))
(cont #f))
逐行:
cont
call/cc
(这里最终被忽略)。k
这里表示一切,这将在之后发生,在我们的例子中,在某种意义上类似于(lambda (call/cc-retval) (let () call/cc-retval (cont #f)))
。我们cont
为这种延续设定了价值。call/cc
返回。cont
now 是一个表示延续的函数,并且它的参数是“call/cc 的返回值”,我们只调用该函数,参数被忽略,我们需要(cont #f)
再次调用。因此,我们最终得到的是无限循环。