名前と束縛

プログラミング言語の決定的な側面は、名前を式に束縛するためのしくみです。 さらにその名前自身が式になります。 例えば次の構文で表わされるのは、 式 1+2 を名前 x に束縛する宣言です。 また x も値として参照されます。

val x = 1 + 2

ATS では val はキーワードであることに注意してください。 またその宣言は val 宣言として分類されます。 概念上、ATS のような値渡し (call-by-value) の言語において実行時に起きることは、 まずはじめに式 1+2 が値 3 に評価されます。 次に x1+2 の間に束縛ができ、 x3 の間に束縛が 決着 (finalized) します。 本質的に値渡しとは、 名前と式の束縛はそれ以降の評価で使われる前に、 その名前とその式の値の束縛に決着されなければならないことを意味します。 別の例としては、次の構文では3つの束縛を宣言しています。 最初の行ではその内2つが同時に宣言されています。

val PI = 3.14 and radius = 10.0 val area = PI * radius * radius

and キーワードで繋がっている最初の2つの束縛のどちらが先に実行時に決着されるかは、 ATSにおいては未定義であることに注意してください。 けれども3つ目の束縛は最初の2つが完了した後に決着されることは保証されています。 この論点を別の角度から見るために、次のコードを型検査してみましょう。

val x = 0 and y = x + 1

この場合、エラーメッセージは式 x + 1 の中にある名前(もしくは動的な識別子) x が束縛されていないことを示しています。 具体的には上記のコードの中にある2つの x 同士に関係がないのです。