[卒研] 動いた

意図したとおり動いた。とりあえずはokかな

> (set! number (lambda (x) (lambda () x)))
> (set! num10 (number 10))
> (set! num20 (number 20)) ; ここで(lambda (x) <>)のxが上書き、、、されない!
> (num10)
10

あと、一応tak関数も動く

> (set! tak 
        (lambda (x y z)
           (cond ((< y x)
                  (tak (tak (- x 1) y z)
                       (tak (- y 1) z x)
                       (tak (- z 1) x y)))
                 (t y))))
(set! tak (lambda (x y z) (cond ((< y x) (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y))) (t y))))
#<closure>(x y z)((cond ((< y x) (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y))) (t y)))
> (tak 3 2 0)
(tak 3 2 0)
3
> (tak 3 4 0)
(tak 3 4 0)
4
> (tak 3 4 5)
(tak 3 4 5)
4

でも(tak 12 6 0)とかを入れるとメモリを1Gぐらい消費して死ぬ。今の実装だと、整数は常にmallocしているからなぁ。末尾再帰も最適化していないし。

メモ

作っているのはschemeelispの合いの子のようなもの。L2Lisp見たいのをcで実装してる。