2

Scheme について読んだとき、私はこの声明に出くわしました。

「活性化スタックに相当するスキームは、実際には部分的な継続 (中断レコード) のチェーンです。」

これが実際に何を意味するのか、私は少し混乱しています。スキーム スタックと、たとえば C のスタックとの違いは何ですか?

4

3 に答える 3

5

Scheme は構造 call-with-current-continuation をサポートしています (これについては R5RS を参照してください)。この構文を使用して、前の継続に戻ることができます。これは、アクティベーション レコードがスタックを形成しなくなったことを意味します。代わりに、アクティベーション レコードはツリーを形成します (スタックはツリーの特殊な形式であることに注意してください)。継続の概念を感じるために、私はお勧めできます

ダニエル・P・フリードマン。「継続の適用: 招待チュートリアル」. 1988 プログラミング言語の原則 (POPL88)。1988 年 1 月 http://www.cs.indiana.edu/hyplan/dfried/appcont.pdf

継続に夢中になっている場合は、ここに興味深い論文がたくさんあります。

于 2011-02-25T14:18:03.170 に答える
0

Cでは、スタックは、中断したときにどこにいたかを示す一連のメモリポインタにすぎません。

スキームでは、すべてがリストであるため、実際にはリストを上に移動するだけです。実際には、プログラムがスタックであるかのように見ることができます。

于 2011-02-24T23:56:49.813 に答える
0

基本的な違いは、Scheme (とりわけ) では、スタックの現在の状態がファースト クラス オブジェクトである可能性があることです。(たとえば) スタック状態全体を保持する変数を作成できます。次に、その継続を使用して、同じ開始状態からさまざまな関数を呼び出すか、通常のリストのように「スタック」(のスキーム ビュー) を歩き回ることができます。

于 2011-02-25T00:05:19.980 に答える