メモ

非効率ではあるものの、こんなのが普通に動くようになった。

(run-program '(let ((make-bank-account
                     (lambda (amount)
                       (lambda (n)
                         (set! amount (+ amount n))
                         amount))))
                (let ((foo (make-bank-account 0)))
                  (foo 1000)
                  (foo 500)
                  (foo -100))))
=> "1400\n"

しかし今は動くプログラムを考えるのがとても難しい。

  • クロージャはある。set! もできる。when, cond, vector, string もある。
  • 深い再帰をすると破綻するので、letrec は動くけど fib も ack も tak も動かせない。一歩後退している。
  • 小数は全く対応していない。よって、いつか動かしてみたい aobench は相当遠い。
  • もちろん GC も無い。
  • そして普通に動きそうでまだ無い手続きが幾つかある。princ とか map とか。
  • そもそもトップレベルという概念がないので、 define ができない。