【发布时间】:2012-05-08 11:57:08
【问题描述】:
我想我知道什么是延续(一般来说),但我不明白它是如何在 Scheme 中使用的。
考虑这个例子(来自维基百科call/cc)
(define (f return)
(return 2)
3)
(display (call/cc f)) ;=> 2
我不明白为什么:
延续是隐含的?对吧?
这种情况下的延续如何?
【问题讨论】:
标签: scheme continuations
我想我知道什么是延续(一般来说),但我不明白它是如何在 Scheme 中使用的。
考虑这个例子(来自维基百科call/cc)
(define (f return)
(return 2)
3)
(display (call/cc f)) ;=> 2
我不明白为什么:
延续是隐含的?对吧?
这种情况下的延续如何?
【问题讨论】:
标签: scheme continuations
继续是仍有待执行的“计算的其余部分”。在您的特定示例中,您可以将其视为(display []),其中[] 是一个要插入值的孔。也就是说,在调用call/cc 时,剩下要做的就是调用显示。
call/cc 所做的就是接受这个延续并将其放入一个可以像函数一样应用的特殊值中。它将这个值传递给它的参数(这里是f)。在f 中,延续绑定到return。所以(return 2) 基本上会将2 插入延续,即(display 2)。
我不认为这个例子实际上很有帮助,所以如果你有兴趣了解更多关于延续的信息,我认为你应该阅读PLAI(参见第 VII 部分)。另一个很好的来源是 Dan Friedman 的 these lecture notes。
【讨论】: