(wat-aro)

生きてます

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

SICP 問題 5.38d

+と*について任意個の被演算子の式が使えるように拡張する. ここに書いた手続きを変更もしくは追加する. 3つ以上の引数の時はarg1に畳み込んで計算していく. (define (compile-open-code exp target linkage ct-env) (cond ((= (length exp) 3) (compile…

SICP 問題 5.38c

元のcompileによる出力と5.38abでcompile-open-codeを追加したコンパイラの出力を比べる. 命令列が約半分になっている. compile-open-codeを追加したコンパイラの出力 ((env) (val) ((assign val (op make-compiled-procedure) (label entry1) (reg env)) …

SICP 問題 5.38ab

+ - * = はopen-codeとして (reg val (op +) (reg arg1) (reg arg2)) の形で処理できるようにする. (define (open-code? exp) (memq (car exp) '(= * - +))) (define (compile exp target linkage) (cond ((self-evaluating? exp) (compile-self-evaluating…

SICP 5.5.5 翻訳系

schemeの式をレジスタマシンのシミュレータの命令列に翻訳するコード. 理解するためにコメントを出来るだけつけた (load "./eval.scm") ;;; make-branchのための手続き (define label-counter 0) (define (new-label-number) (set! label-counter (+ 1 labe…