「コンパイラ・スクリプトエンジン」相談室9at TECH
「コンパイラ・スクリプトエンジン」相談室9 - 暇つぶし2ch202:デフォルトの名無しさん
06/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けど
壮大な勘違いをしている可能性もありそうなのでアドバイス求む


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch