2012-04-27 84 views
3

我想我得到了延续是(一般)什么,但我不明白它是如何在方案中使用。延续方案

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

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

我不明白为什么:

  • 延续是隐含的权利?

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

回答

12

延续是一个有待执行“计算的休息”。在您的特定示例中,您可以将其视为(display []),其中[]是一个需要插入值的洞。也就是说,在调用call/cc的时候,还有待完成的是要显示的调用。

call/cc所做的是采取这种延续并将其放入一个特殊值,可以像函数一样应用。它将此值传递给它的参数(这里是f)。在f中,延续必然与return。因此(return 2)基本上将2插入延续,即(display 2)

我不认为这个例子其实是非常有帮助的,所以我觉得你应该读PLAI如果你有兴趣了解更多关于延续(见第七部分)。另一个很好的来源是Dan Friedman的these lecture notes

+1

此外,当你把代码放入延续传球风格。以下是在线发布的弗里德曼编程语言课程讲义。 https://www.cs.indiana.edu/cgi-pub/c311/lib/exe/fetch.php?media=cps-notes.scm – 2012-04-27 22:12:07