プログラミング再入門

プログラミングをもう一度ちゃんと勉強する読書ノート

2015-01-01から1年間の記事一覧

SICP 5.5.7 Interfacing Compiled Code to the Evaluator / Exercise 5.52

ノート Exercise 5.52 C言語でShemeコンパイラを作れと言っているのではなく、この章のコンパイラをCのプログラムを吐く様に改造せよと言っている。 ここでもswiftを使う事にする。直ぐに気づく問題点は レジスタマシンやアセンブラのレベルに変換する訳では…

SICP 5.5.7 Interfacing Compiled Code to the Evaluator / Exercise 5.51

ノート Exercise 5.51 5.2ではレジスタマシン・シミュレータをSchemeで実装したが、これをC言語で実装するなら5.4のExplicit Evaluatorは基本的には何も変換する必要はない筈なのできっと問題の意図とは異なる。そうすると『レジスタマシン相当の実行環境をC…

SICP 5.5.7 Interfacing Compiled Code to the Evaluator

ついに最終節 ノート REPLからコンパイラを呼び出して、REPLの環境で実行する。 explicit controller machineはインタープリタだが、コードをコンパイルする組み込みの手続きを用意する。変数として格納されている手続きをオペレータとしてprocに入れた後に…

SICP 5.5.2 Compiling Expressions

ノート Compiling linkage code compile-linkageは各式を命令に変換した後、次の命令への繋ぎを生成する。 引数が'returnの時はレジスタcontinueの内容にジャンプ、'nextであれば何もしない、その他であれば引数をラベルとみなしてそのラベルにジャンプする…

SICP 5.5 Compilation

ノート 前節のインタープリタのプログラムは機械語のプログラムと捉えることができる。 ソースプログラムと機械語とを橋渡しする方法には二つある。 一つはインタープリタ。インタープリタの基本的な命令は機械語のサブルーチンとして実現されていて、ソース…

SICP 5.4.4 Running the Evaluator

ノート ここに書いてあるドライバーループは既に実装として使っている。しかもExcersese 5.25では少し変更もしている。 Exercise 5.25の結果でもちゃんと例は動作する。 (define (append x y) (if (null? x) y (cons (car x) (append (cdr x) y)))) ;;; EC-E…

SICP 5.4 The Explicit-Control Evaluator

ノート 第4章のMetacircular evaluatorをレジスタマシンで実現する。 Registers and operations 第4章で実装した各シンタックスに対応する手続きをそのままレジスタマシンに移植する事も出来るが、ポイントがズレてしまうので各シンタックスに対応する処理…

SICP 5.3 Storage Allocation and Garbage Collection

ノート レジスタマシンとしてのScheme評価器を実装する前に、メモリ割り当てに関する問題を片付けておく。 一つの問題はペア(セル)をどう表現するのか。もう一つの問題は実際には有限のメモリサイズをあたかも無限にあるかの様に見せる技術。 5.3.1 Memory…

SICP 5.2.4 Monitoring Machine Performance

ノート パフォーマンスを測る為の仕組みをシミュレータに組み込む。 Exercise 5.14 0を入力すると終了する様にfactorial-machineを改造して実行する。 > (define factorial-machine (make-machine (list (list '= =) (list '- -) (list '* *) (list 'read re…