(wat-aro)

生きてます

2016-02-10から1日間の記事一覧

SICP 問題 5.49

compileとassembleを機械計算として持ち,REPLを行うレジスタ計算機を設計する. はじめ,assembleを命令列の上でやる方法がわからずに,compile-and-assembleという手続きを作り, それを機械演算として登録してRCEPLを実装したが, 問題5.49 – SICP(計算…

SICP 問題 5.48

ECEVALのrepl上でコンパイル出来るようにする. これで動くかなって思ったら動いた. ただトレースした命令列を見ると, apply-dispatchからprimitive-procedureにジャンプせずに先頭に戻っている. なぜそうなるのかわからない. ;; 環境を拡張してprimitiv…

SICP 問題 5.47

コンパイルした手続きから積極制御評価器で定義した手続きを使えるようにする. (define (compile-procedure-call target linkage) (let ((primitive-branch (make-label 'primitive-branch)) (compiled-branch (make-label 'compiled-branch)) (compound-br…

SICP 問題 5.46

5.45と同様に今度はフィボナッチ数列の計算でそれぞれ比べる. gosh> (define fib ;;一回目以外は省略 (make-machine (list (list '< <) (list '- -) (list '+ +)) '(controller (assign continue (label fib-done)) fib-loop (test (op <) (reg n) (const 2…

SICP 問題 5.45

コンパイルした階乗計算,積極制御評価器の階乗計算,特殊目的計算機のプッシュ数,最大スタック深さを調べて比較する. まずはコンパイルしたものから gosh> (compile-and-go '(define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n)))) (total-pu…