« C言語のプロトタイプ宣言 | Main | main関数のプロトタイプ宣言 »

2007.08.26

SICP 4章から再開

(define the-global-environment (setup-environment))からリハビリをかねて追ってみる。

setup-environmentは、initial-envにextend-environmentの戻り値を設定した後、define-variable!でtrueとfalseを設定して、initial-envを返す。

extend-environmentを呼ぶ前に、primitive-procedure-names、primitive-procedure-objects、the-empty-emvironmentを評価する。

primitive-procedure-names が(car cdr cons null?)で、primitive-procedure-objectsは、こんな感じのテーブル。primitive-procedureを定義している所で、すでにgoshのcarとか、cdrを呼ぶように設定しているのか。the-empty-emvironmentはただの()。

exstend-envrinmentは、手続き名のリストと、手続きの対象のリストを受け取って、make-frameの戻り値を、base-env(最初はthe-empty-emvironment)とconsする。make-frameはただのconsだからtrueとfalseを設定する前のinitial-envはこんな感じ。

define-variable!は、予想以上に複雑。まずは、first-frameを取得して、frame-valuables(今はprimitive-procedure-names)と、frame-values(今はprimitive-procedure-objects)とを引数にscanをかける。scanの中で、変数の名前が一致したら、新しい変数で値を上書き。見つからなかったら、add-binding-to-frame!で、変数の束縛と。trueとfalseを定義した後は、the-global-environmentはこんな感じ

手加減してもらうと、Lispもだいぶ追えるようになっている。

|

« C言語のプロトタイプ宣言 | Main | main関数のプロトタイプ宣言 »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16248777

Listed below are links to weblogs that reference SICP 4章から再開:

« C言語のプロトタイプ宣言 | Main | main関数のプロトタイプ宣言 »