有人可以在计划中解释这个延续吗?

时间:2009-12-01 03:03:26

标签: functional-programming scheme continuations

我正在学习延续,但我无法理解这段代码。为什么会进入无限循环?

(let ((cont #f))
  (call/cc (lambda (k)
             (set! cont k)))
  (cont #f))

1 个答案:

答案 0 :(得分:4)

逐行:

  • 我们定义局部变量cont
  • 我们用当前的continuation调用一些lambda函数,也就是说,我们将当前的continuation作为参数传递给lambda函数。当前的继续是1参数的函数,然后该参数被用作call/cc的“返回值”(这里最终被忽略)。
  • 所以k在这里表示一切,在我们的情况下会发生在(lambda (call/cc-retval) (let () call/cc-retval (cont #f)))的意义上。我们将cont值设置为此延续。 call/cc返回。
  • 由于cont现在是一个表示延续的函数,它的参数是“call / cc的返回值”,我们只调用该函数,参数被忽略,我们需要调用{ {1}}再次。

因此,我们最终获得的是无限循环。