有人可以解释一下计划中的这个延续吗?
-
22-07-2019 - |
题
我正在学习延续,但我无法理解这段代码。为什么会进入无限循环?
(let ((cont #f))
(call/cc (lambda (k)
(set! cont k)))
(cont #f))
解决方案
逐行:
- 我们定义局部变量
cont
- 我们用当前延续调用某个 lambda 函数,也就是说,我们将当前延续作为参数传递给 lambda 函数。当前延续是 1 个参数的函数,然后将该参数用作
call/cc
(这里最终被忽略)。 - 所以
k
这里表示一切,在我们的例子中,在某种意义上接近于之后发生的事情(lambda (call/cc-retval) (let () call/cc-retval (cont #f)))
. 。我们设置cont
对这种延续的价值。call/cc
返回。 - 自从
cont
现在是一个代表延续的函数,它的参数是“call/cc的返回值”,我们只需调用该函数,参数就会被忽略,我们需要调用(cont #f)
再次。
这样,我们最终得到的是无限循环。
不隶属于 StackOverflow