Next: 11 リードマクロの利用
Up: 10 リード,コンパイル,実行ループの実装
Previous: 10.5 マクロ定義
変数環境を閉じ込めるクロージャが
実現できているかどうかを見てみると
=> (define a ((lambda (x)
(lambda (y) (set! x (+ x y))))
10))
A
=> a
#S(FN
:CODE
#((ARGS 1) (LVAR 1 0 ";" X)
(LVAR 0 0 ";" Y) (GVAR +) (CALL 2)
(LSET 1 0 ";" X) (RETURN))
:ENV (#(10) #()) :NAME A :ARGS NIL)
=> (a 3)
13
=> (a 5)
18
=> (a 10)
28
=> a
#S(FN
:CODE
#((ARGS 1) (LVAR 1 0 ";" X)
(LVAR 0 0 ";" Y) (GVAR +) (CALL 2)
(LSET 1 0 ";" X) (RETURN))
:ENV (#(28) #()) :NAME A :ARGS NIL)
=> (a 20)
48
=> a
#S(FN
:CODE
#((ARGS 1) (LVAR 1 0 ";" X)
(LVAR 0 0 ";" Y) (GVAR +) (CALL 2)
(LSET 1 0 ";" X) (RETURN))
:ENV (#(48) #()) :NAME A :ARGS NIL)
という具合に,envに蓄えられています.
generated through LaTeX2HTML. M.Inaba 平成18年5月6日