R6RS:翻訳:R6RS:5.2 Variables, keywords, and regions

R6RS:翻訳:R6RS:5.2 Variables, keywords, and regions

5.2 変数、キーワード、領域

ライブラリやトップレベルプログラムの本体内では、識別子は構文のようなものや値の格納されている場所に名前をつけている。構文のようなものに名前をつける識別子をキーワード、あるいは構文キーワードと呼び、その種の構文に束縛されていると言う(構文抽象の場合では、変換子が構文を原始フォームに変換する。 R6RS:翻訳:R6RS:9.2 Macros 参照)。場所に名前をつける識別子は変数と呼ばれ、その場所に束縛されていると言う。トップレベルプログラムやライブラリの各時点では、特定の、一定の識別子の集合が束縛されている。このような識別子の集合、可視な束縛の集合はその時点で有効な環境として知られている。

構文抽象を作成し、キーワードを変換子に新たな構文抽象を束縛するのに特定のフォームが使われる一方で、新たな場所を作成し、変数をその場所に束縛するフォームもある。このような構文を総称して束縛構文と呼ぶ。束縛構文には定義のかたちを取るものもあり、式であるものもある。ライブラリから公開された束縛には例外があるが、定義によって作成された束縛はその定義の現れた本体部分からのみ可視である。すなわち、ライブラリ、トップレベルプログラム、 lambda 式の本体部分でのことである。ライブラリから公開された識別子はそれを導入したライブラリやトップレベルプログラムの本体部分からも可視である(R6RS:翻訳:R6RS:7 Libraries 参照)。

変数を束縛する式には、基盤ライブラリには、 lambda、 let、 let*、 letrec、 letrec*、 let-values、 let*-values フォームがある(R6RS:翻訳:R6RS:11.4 Expressions の 11.4.2、 11.4.6 参照)。これらのうち lambda がもっとも基本的なものである。このような式やライブラリやトップレベルプログラムの本体に現れる変数定義は、 letrec* の集合として扱われる。さらに、ライブラリの本体ではライブラリの公開した変数をそれを導入したライブラリやトップレベルプログラムから参照することができる。

キーワードを束縛する式には let-syntax と letrec-syntax がある(R6RS:翻訳:R6RS:11.18 Binding constructs for syntactic keywords 参照)。 define フォーム(R6RS:翻訳:R6RS:11.2 Definitions の 11.2.1 参照)は変数束縛を作成する定義であり(R6RS:翻訳:R6RS:11.2 Definitions 参照)、 define-syntax フォームはキーワード束縛を作成する定義である(R6RS:翻訳:R6RS:11.2 Definitions の 11.2.2 参照)。

Scheme はブロック構造を通した静的有効範囲の言語である。識別子の束縛されているトップレベルプログラムやライブラリの本体の各場所では、そこが束縛の可視なコード領域と対応する。領域は束縛を確立する特定の束縛構文により決定される。例えば、束縛が lambda 式により確立された場合、その領域は lambda 式全体になる。識別子への言及はそれぞれ、その使用を含むいちばん内側の領域を確立した識別子の束縛を参照する。外側の式に識別子の束縛を含まない場所で識別子が使用された場合、その使用は定義による束縛や外側のライブラリやトップレベルプログラムで導入された束縛を参照する(R6RS:翻訳:R6RS:7 Libraries 参照)。識別子への束縛がない場合、その識別子は未束縛であると言う。

More ...