問題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.12-5.13

久しぶりすぎて何やってたっけ状態です。
…、ああ、アセンブリ言語っぽいことをやってたんでした。最近大学で似たようなことやってるので食傷ぎみです。
あとデュアルディスプレイ環境入れたら、blog編集しながらScheme弄れたり、firefoxみながら何か書けたりするのですごく楽です。もっと早く入れればよかった。

続きを読む