SICP-Lite #3
気づくと、まだ3回目。もっと、何回もやっている記憶がするなぁ。
環境フレーム
今日は、環境と環境フレームの話からスタート。
SICPの本には、環境の説明がされているのですが、Gaucheの本には同じことを環境フレームと言う概念で説明してます。
Gaucheの本をちゃんと読んでいないけど、SICPよりもやっぱりわかりやすく解説してくれてる感じです。
ちなみに、『プログラミング in Ocaml』でも、同様に環境フレームで説明してた気がする。
ダイナミックスコープとレキシカルスコープ
だいたい理解できた。Gaucheでどうやってテストできるかなぁ、と思っていたのですが、
これで、okですね。
(let ((y 7)) (define (scope-test x) (list x y)) (scope-test 3) ; => (3 7) (let ((y 5)) (scope-test 3))) ; => (3 7)
と言うことで、その手続きが定義された時点の環境で自由変数が束縛されている、と言うのがわかる。
ちなみに、ダイナミックスコープの場合の環境の絵ってどうなるんだろう。イメージ的には、変数テーブルが大域にしかなくって、新たに変数を束縛しちゃうと、そのテーブルに積まれちゃって、元の値が見れなくなる、って感じだろうか?