前回と前々回は,関数型言語MLの一種であるObjective Caml(OCaml)で,単純な独自の命令型言語MyCのインタプリタとコンパイラを実装してみた。MyC言語では,変数はすべてグローバルで,宣言も不要だった。 しかし,グローバル変数だけでは名前の衝突などの問題があり,大きなプログラムを書くことは難しい。そのため,ほとんどの汎用プログラミング言語には,変数の有効範囲(スコープ)を制限する機能がある。例えば,すでに何度も登場しているが,OCamlでは次のような形の式を書くことができる。 このように書くと,式1の値が変数xに置かれる(xが束縛される,という言い方をする)。そのxの値は,式2の中でのみ使うことができる。つまり,xのスコープは式2だけということになる(in以降を省略することもできる。その場合はそれ以降のすべての式がスコープに含まれる)。 ただし,もし式2の中でまた同じ名前の