問題5.35 – SICP(計算機プログラムの構造と解釈)その286
問題5.35 (parse-compiled-code (compile ‘(define (f x) (+ x (g (+ x 2)))) ‘val ‘next)) 以下は、上記手続きをコンパイルしたもの。 (env) (val) (assign val (op make-compiled-procedure) (label entry1) (reg env)) (goto (label aft…続きを読む
問題5.35 (parse-compiled-code (compile ‘(define (f x) (+ x (g (+ x 2)))) ‘val ‘next)) 以下は、上記手続きをコンパイルしたもの。 (env) (val) (assign val (op make-compiled-procedure) (label entry1) (reg env)) (goto (label aft…続きを読む
問題5.34 こちらの反復的手続きの factorial では末尾再帰になっている。 一方こちらは再帰的手続きの factorial のコンパイル済みコード。 (env) (val) (assign val (op make-compiled-procedure) (label entry1) (reg env)) (goto (label after-lambda2)) entry1 (assi…続きを読む
問題5.33 factorial と factorial-alt のコンパイル結果を以下に示す。 factorial (env) (val) (assign val (op make-compiled-procedure) (label entry1) (reg env)) (goto (label after-lambda2)) entry1 (assign env (op compiled-p…続きを読む
問題5.32 a. (define eceval (make-machine ;; 省略 ev-application (save continue) (assign unev (op operands) (reg exp)) (assign exp (op operator) (reg exp)) (test (op symbol?) (reg exp)) (branch (label ev-o…続きを読む
ファイルパーミッションの変更 読み込み(Read) 4 書き込み(Write) 2 実行(eXecute) 1 $ chmod mode file … Linux でファイルパーミッションの変更 オーナーの変更 $ chown owner[:group] file … グループの変更 $ chgrp group file … $ chown :group file …
問題5.31 よくわからないので、それぞれの場合のコンパイル結果を載せておく。 コンパイル結果の表示は以下の手続きで見易いように改行させる。 (define (parse-compiled-code lis) (if (not (null? lis)) (begin (if (pair? (caar lis)) (map (lambda (x) (if (symbol? x) (print x) …続きを読む
いよいよ、最後の5.5節。 コンパイラを作ってプログラムを走らせる方法を調べる。 今回も問題を解く前に、動作するコンパイラを作っておく。 作るといっても書き写すだけ。そのまま、修正の必要もなく動作した。 ;;;; 5.5.1 翻訳系の構造 ;;; 翻訳系のトップレベルの振り分け処理 compile (define (compile exp target linkage) (cond ((self-…続きを読む
問題5.30 a. これまで、未束縛の変数があった場合は基盤の scheme のエラーを発生させていたために、評価器の駆動ループが終了されて基盤の scheme に戻ってしまっていた。 これを、未束縛の変数の存在を捕捉し評価器の駆動ループ内で処理させるように変更する。 ;;; EC-Eval input: (+ x 2) *** ERROR: Unbound variable x Stack Tr…続きを読む
問題5.29 ;;; EC-Eval input: (define (fib n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))) (total-pushes = 3 maximum-depth = 3) ;;; EC-Eval value: ok ;;; EC-Eval input: (fib 3) (total-pushes = 128 m…続きを読む
問題5.28 評価器を末尾再帰的でないように ev-sequence を変更(p333)し、それぞれの版の factorial を実行する。 反復的手続きの場合 ;;; EC-Eval input: (define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter p…続きを読む