問題5.36 – SICP(計算機プログラムの構造と解釈)その287
問題5.36 コンパイラは右から左へと被演算子を評価していく。(5.5.3 組み合せの翻訳) 以下は (+ x y) をコンパイルした結果。 被演算子 y の探索が先にきている。 (env) (env proc argl continue val) (assign proc (op lookup-variable-value) (const +) (reg env)) (assign val (o…続きを読む
問題5.36 コンパイラは右から左へと被演算子を評価していく。(5.5.3 組み合せの翻訳) 以下は (+ x y) をコンパイルした結果。 被演算子 y の探索が先にきている。 (env) (env proc argl continue val) (assign proc (op lookup-variable-value) (const +) (reg env)) (assign val (o…続きを読む
1.1 手始めに プログラムには main 関数が必要。 演習1-2 #include <stdio.h> int main(int argc, char *argv[]) { printf("hello,\x\n"); return 0; } $ gcc -o ex1-2 ex1-2.c ex1-2.c:13:12: error: \x used with no …続きを読む
なんか vim で *.c のファイルを作るたびにキーワード補完プラグインの neocomplcache のエラーが表示されるなと思ったら、 ~/.neocon/syntax_cache/ に作られた c= ファイルの所有者が root になっていて書き込みが出来なかったためだった。 所有者を変更したらエラーは発生しなくなった。 MacPorts のファイルを sudo vi で修正した時に作られ…続きを読む
問題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-…続きを読む