我正在学习延续,但我无法理解这段代码。为什么会进入无限循环?
(let ((cont #f))
(call/cc (lambda (k)
(set! cont k)))
(cont #f))
答案 0 :(得分:4)
逐行:
cont
call/cc
的“返回值”(这里最终被忽略)。k
在这里表示一切,在我们的情况下会发生在(lambda (call/cc-retval) (let () call/cc-retval (cont #f)))
的意义上。我们将cont
值设置为此延续。 call/cc
返回。cont
现在是一个表示延续的函数,它的参数是“call / cc的返回值”,我们只调用该函数,参数被忽略,我们需要调用{ {1}}再次。因此,我们最终获得的是无限循环。