新しい環境

lispでクロージャで新しい環境を作成するタイミングは、そのクロージャを適用するとき。
クロージャを生成するときに新しい環境を生成して、その環境を使いまわすとたぶんこうなる。

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

でも

自作lispで下のコードが動かないorz

(set! make-number ((lambda (x) (lambda nil x))))

実践できない。。。

間違ってた。

(set! make-number (lambda (x) (lambda nil x)))

だった。