自由変数

自由変数の決定(その3)

前回までの投稿で、Scheme(Gauche)ではレキシカルスコープが使われていることが分かった(たぶん)。そもそも、自由変数がどう決定されるのかを調べ始めるきっかけは、Schemeのマクロ内の自由変数がどう扱われるかをみるためだったので、それについても書い…

自由変数の決定(その2)

前回の投稿後に、それぞれの言語の挙動をもう少し調べてみた。 Scheme (define (hoge) (print var)) (define (fuga) (let ((var 1)) (print var))) (define var 2) (hoge) ;=> 2 (fuga) ;=> 1 (set! var 3) (hoge) ;=> 3 (fuga) ;=> 1 python def hoge(): pr…

自由変数の決定

schemeのマクロを勉強している時に、 1 (define-syntax mcr 2 (syntax-rules () 3 ((_) (print var)))) 4 5 (define (fnc) (print var)) 6 7 (define var 2) 8 (mcr) 9 (fnc) 10 (set! var 3) 11 (mcr) 12 (fnc) の実行結果が、 2 2 3 3 なのが衝撃だった。…