- 202 名前:デフォルトの名無しさん mailto:sage [2006/01/04(水) 20:39:45 ]
- お久しぶりです、実装について質問させてくださいまし
クロージャの実装についてですが例えば、以下のソース (let ((a 0)) (define hoge (lambda (x) (+ a x)))) を eval する際に、クロージャ hoge をどのようにクラス化 するかについてですが、 トップ環境フレームを top 、矢印は親を指すとして上の例だと top <- frame1(aを束縛している) のようにフレームが伸びていて、クロージャオブジェクトは frame1へのポインタをメンバに持つように作成したとします で、このクロージャへの呼び出しをするとき、例えば (hoge 10)としたとき top <- frame2(10を束縛) のように別フレームが伸びるじゃないですか。 このとき、(hoge 10)を評価するときに必要な環境として2つの連結リスト top <- frame1 top <- frame2 が二つ必要になる?という見解はあってますか?評価手順としては x の検索を frame1 に対してかける(見つかる) a の検索を frame1 に対してかける(見つからない) a の検索を frame2(クロージャクラスのメンバ変数) に対してかける(見つかる) を順次探しにいく、という風にするという考え方?で良いのでしょうか なんか上手く日本語化できなかったorzけど 壮大な勘違いをしている可能性もありそうなのでアドバイス求む
|

|