【发布时间】:2011-07-03 23:29:46
【问题描述】:
在阅读有关 Scheme 的内容时,我发现了这个声明。
“方案相当于激活堆栈实际上是一个部分延续链(暂停记录)。”
我对这实际上意味着什么有点困惑。方案堆栈与 C 的区别是什么?
【问题讨论】:
标签: scheme stack continuations
在阅读有关 Scheme 的内容时,我发现了这个声明。
“方案相当于激活堆栈实际上是一个部分延续链(暂停记录)。”
我对这实际上意味着什么有点困惑。方案堆栈与 C 的区别是什么?
【问题讨论】:
标签: scheme stack continuations
Scheme 支持构造 call-with-current-continuation(在 R5RS 中了解它)。该构造可用于返回到先前的延续。这意味着激活记录不再形成堆栈。相反,激活记录形成一棵树(请注意,堆栈是树的特殊形式)。为了了解延续的概念,我可以推荐
丹尼尔·P·弗里德曼。 “延续的应用:特邀教程”。 1988 年编程语言原理 (POPL88)。 1988 年 1 月。 http://www.cs.indiana.edu/hyplan/dfried/appcont.pdf
如果你迷上了 continuation,那么你会发现很多有趣的论文 here。
【讨论】:
基本区别在于,在 Scheme(以及其他)中,堆栈的当前状态可以是/是第一类对象。您可以(例如)创建一个包含整个堆栈状态的变量。然后,您可以使用该延续从相同的起始状态调用不同的函数,或者您可以像普通列表一样遍历(方案视图)“堆栈”。
【讨论】:
在 C 语言中,您的堆栈只不过是一系列内存指针,告诉您停止时所处的位置。
在Scheme 中,由于所有内容都是一个列表,因此您实际上只是在向上移动一个列表。您实际上可以将其视为您的程序就是堆栈。
【讨论】: