继续计划

时间:2012-04-27 18:04:15

标签: scheme continuations

我认为我得到了一个延续(一般),但我无法理解它在Scheme中是如何使用的。

考虑这个例子(来自维基百科call/cc

(define (f return)
  (return 2)
  3)
(display (call/cc f)) ;=> 2

我无法理解为什么:

  • 延续是隐含的吗?对吗?

  • 在这种情况下如何继续?

1 个答案:

答案 0 :(得分:13)

延续是剩下要执行的“剩余计算”。在您的特定示例中,您可以将其视为(display []),其中[]是要插入值的洞。也就是说,在调用call/cc时,剩下要做的就是调用显示。

call/cc做的是继续这个延续并将其放在一个可以像函数一样应用的特殊值中。它将此值传递给其参数(此处为f)。在f中,延续绑定到return。因此(return 2)基本上会将2插入延续,即(display 2)

我不认为这个例子实际上非常有帮助,所以如果你有兴趣了解有关延续的更多信息,我认为你应该阅读PLAI(见第七部分)。丹·弗里德曼的另一个好消息是these lecture notes