SICP(計算機プログラムの構造と解釈)を読み終えて
最後のC言語での実装の2問が残っているけれども、一旦これで終了とする。 2008年の11月に開始したので約1年と1ヶ月ちょっとかかったことになる。 計算機プログラムの構造と解釈 posted with amazlet at 09.12.29 ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン ピアソンエデュケーション 売り上げランキング: 119177 Amazon.co.j…続きを読む
最後のC言語での実装の2問が残っているけれども、一旦これで終了とする。 2008年の11月に開始したので約1年と1ヶ月ちょっとかかったことになる。 計算機プログラムの構造と解釈 posted with amazlet at 09.12.29 ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン ピアソンエデュケーション 売り上げランキング: 119177 Amazon.co.j…続きを読む
問題5.50 4.1節の超循環評価器を compile-and-go させる。 primitive-procedures に必要な手続きを追加していく。 また、let が定義されていなかったので基本手続きに let を追加する。 レジスタ計算機シミュレータの make-new-machine は性能監視機能を追加したものを使った。 環境へ基本手続きを登録する際に map が上手く動作しなかったので…続きを読む
問題5.49 式を "読み込み(read-eval-print-loop)"、それを"翻訳(compile)"し、結果のコードを"アセンブリ(assemble)"して実行し、結果を"印字(print-result)"する。 (load "./register_machine.scm") (load …続きを読む
問題5.48 ;; 環境に compile-and-run を基本手続として追加する。 (define (setup-environment2) (extend-environment (list ‘compile-and-run) (list (list ‘primitive compile-and-run)) (setup-environment))) ;; setup-environment…続きを読む
問題5.47 元の翻訳系では翻訳した手続きが合成手続き(解釈される手続き)を呼び出せない。 $ gosh gosh> (load "./ece4compiler.scm") #t (compile-and-go ‘(begin (define (g x) (+ x 10)) (define (f x) (g x)))) (total-pushes = 0 max-dept…続きを読む
Fibonacci でのプッシュ回数、最大スタック深さを翻訳版、解釈版、特殊目的版で比較する。 プッシュ回数の比較 n 翻訳版 解釈版 特殊目的版 翻訳版と解釈版の比率 翻訳版と特殊目的版の比率 3 27 128 8 4.741 0.296 4 47 240 16 5.106 0.340 5 77 408 28 5.299 0.364 6 127 688 48 5.417 0.378 7 207 …続きを読む
問題5.45 push回数 n 翻訳版 解釈版 翻訳版と解釈版の比率 特殊目的版 翻訳版と特殊目的版の比率 3 19 80 4.211 4 0.211 4 25 112 4.480 6 0.240 5 31 144 4.645 8 0.258 6 37 176 4.757 10 0.270 7 43 208 4.837 12 0.279 8 49 240 4.898 14 0.286 30 181…続きを読む
翻訳したコードを受け取った場合の処理を追加し、コードを翻訳して REPL 呼び出す手続きを追加する。 実行には以下のファイル群を利用する。 compiler.scm (5.5節の翻訳系) ece4compiler.scm (5.4節の積極制御評価器計算機) eval4ece.scm (4.1節の超循環評価器) register_machine.scm (5.2節のレジスタ計算機) これらをまとめた…続きを読む
問題5.44 compile の振り分け時に定義が上書きされているかを調べる。 (define (compile exp target linkage ct-env) ;; 省略 ((open-code-operator? exp ct-env) (compile-open-code exp target linkage ct-env)) ;; 省略 (else (error "Unkn…続きを読む
問題5.43 4.1.6節の問題4.16で作った scan-out-defines を compile-lambda-body に組み込む (define (compile-lambda-body exp proc-entry ct-env) (let ((formals (lambda-parameters exp))) (append-instruction-sequences (make-i…続きを読む