問題5.23-5.30
レジスタ計算機言語でがりがりとScheme評価器を作ります。
4章で使った抽象が役に立ちます。というかあれをもっと低いレベルに落としたのが積極評価機ぽいです。
4章のコードをそのままコピペして積極評価機を動かそうとすると、applyを書き換えていたのでエラーになります。evalとapplyは使わないのでコメントアウトしたり削除したりするとちゃんと動きます。
> (start eceval) ;;; EC-Eval input: (define (append x y) (if (null? x) y (cons (car x) (append (cdr x) y)))) ;;; EC-Eval value: ok ;;; EC-Eval input: (append '(a b c) '(d e f)) ;;; EC-Eval value: (a b c d e f) ;;; EC-Eval input: (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) ;;; EC-Eval value: ok ;;; EC-Eval input: (fact 10) ;;; EC-Eval value: 3628800
やっぱり動くと楽しいですね。
続きを読む問題5.20-5.22 とばし
ここやりません。もうなんかあんまり覚えてないので。ガベージコレクションは読んで理解しました。とりあえず次は積極制御評価器に入ります。
問題5.12-5.13
久しぶりすぎて何やってたっけ状態です。
…、ああ、アセンブリ言語っぽいことをやってたんでした。最近大学で似たようなことやってるので食傷ぎみです。
あとデュアルディスプレイ環境入れたら、blog編集しながらScheme弄れたり、firefoxみながら何か書けたりするのですごく楽です。もっと早く入れればよかった。
問題5.9-5.11
うーん、3月中に終わらせるとか言ったけどあれはなかったことにします。いやほんと別の用事がいろいろあって…;;;
続き。