5.4 積極制御評価器 – SICP(計算機プログラムの構造と解釈)その273
今回も先に評価器を実装してから問題を解いていく。 4.1.4 の評価器と 5.2 のレジスタ計算機シミュレータをロードする。 4.1.4 の評価器の eval と apply はコメントアウトしておく。 (load "./sicp4.1.4.scm") ; 4.1.4 評価器 (eval, apply をコメントアウトする) (load "./sicp5.2.scm&…続きを読む
今回も先に評価器を実装してから問題を解いていく。 4.1.4 の評価器と 5.2 のレジスタ計算機シミュレータをロードする。 4.1.4 の評価器の eval と apply はコメントアウトしておく。 (load "./sicp4.1.4.scm") ; 4.1.4 評価器 (eval, apply をコメントアウトする) (load "./sicp5.2.scm&…続きを読む
問題5.22 p149 の "問題3.12" の append と append! のレジスタ計算機を作る。 append (define (append x y) (if (null? x) y (cons (car x) (append (cdr x) y)))) (define append-machine (make-machine ‘(continue lis1 li…続きを読む
問題5.21 b. カウンタを陽に持つ再帰的 count-leaves (define (count-leaves tree) (define (count-iter tree n) (cond ((null? tree) n) ((not (pair? tree)) (+ n 1)) (else (count-iter (cdr tree) (count-iter (car tree) n)))…続きを読む
問題5.21 a. 再帰的 count-leaves p62 の count-leaves をアセンブラで実装する。 (define (count-leaves tree) (cond ((null? tree) 0) ((not (pair? tree)) 1) (else (+ (count-leaves (car tree)) (count-leaves (cdr tree)))))) p3…続きを読む
問題5.20 (define x (cons 1 2)) ; (1 . 2) (define y (list x x)) ; (#0=(1 . 2) #0#) ポインタ表記とメモリーベクタ表現の図。 free の最後の値は p4 となる。 計算機プログラムの構造と解釈 posted with amazlet at 08.11.07 ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブ…続きを読む
問題5.19 ブレークポイントを label と label からの距離(整数)のペアのリスト(breakpoints)とする。 label からの距離を count-from-label に保持し、次の label に移動する毎にカウンタをリセットする。 現在の label と label からの距離(count-from-label)のペアがブレークポイントのリスト breakpoints に…続きを読む
問題5.18 make-register 手続きをレジスタのトレースを行うように修正する。 問題5.16の命令トレースの場合と似たような処理となる。 (define (make-register name) (let ((contents ‘*unassigned*) (register-trace-flag #f)) (define (set-register-trace flag) (set!…続きを読む
問題5.17 make-new-machine に label 変数を追加する。 instruction リストに ‘label が存在する場合は advance-pc で次の命令へと進める。 execute で instruction リストの car が ‘label かどうかをチェックし、’label の場合は label 変数に値をセットし、’label でない場合は instructio…続きを読む
問題5.16 make-new-machine にトレースの実行フラグを追加し、フラグのON/OFFメッセージの処理手続きを追加する。 (define (make-new-machine) (let ((pc (make-register ‘pc)) ;; 省略 (instruction-trace-flag #f) (the-instruction-sequence ‘())) ;; 省略 (d…続きを読む
問題5.15 make-new-machine 手続きに命令計数を保持する変数 instruction-count を追加し、execute 手続きに instruction-count をインクリメントする処理を追加する。 instruction-count を取り出す手続き get-instruction-count と、初期化手続き initialize-instruction-count …続きを読む