Scheme中的“Stack”。是什么让它与众不同?

时间:2011-02-24 23:52:50

标签: scheme stack continuations

在阅读有关Scheme的消息后,我发现了这个声明。

“Scheme相当于激活堆栈实际上是一系列部分延续(暂停记录)。”

我对这实际意味着什么有点困惑。计划堆栈与C的区别是什么?

3 个答案:

答案 0 :(得分:4)

Scheme支持构造call-with-current-continuation(在R5RS中读取它)。该构造可用于返回先前的延续。这意味着激活记录不再形成堆栈。相反,激活记录形成一个树(注意堆栈是树的特殊形式)。为了感受延续的概念,我可以推荐

Daniel P. Friedman。 “Continuations的应用:邀请教程”。 1988年编程语言原则(POPL88)。 1988年1月。 http://www.cs.indiana.edu/hyplan/dfried/appcont.pdf

如果你迷上了续篇,那么你会在这里找到很多有趣的论文: http://library.readscheme.org/page6.html

答案 1 :(得分:0)

在C语言中,你的堆栈只不过是一系列内存指针,告诉你离开时的位置。

在Scheme中,因为所有内容都是一个列表,所以你真的只是向上移动一个列表。你实际上可以看看它就像你的程序是堆栈一样。

答案 2 :(得分:0)

基本区别在于Scheme(以及其他)中堆栈的当前状态可以是/是第一类对象。您可以(例如)创建一个包含整个堆栈状态的变量。然后,您可以使用该延续从相同的起始状态调用不同的函数,或者您可以像“普通列表”一样(“堆栈”)的“方案视图”。