先程の式 x * 2 には、 x, *, 2 という要素が入っていました。 x は変数です。 2 は定数です。 * は積演算です。 で、
ところで、 * という積演算は当然 関数の一つです。 この様に 式は、変数と定数と関数を組み合わせたものと 考えることが出来ます(*)。 変数それ自体でも式ですし、定数それ自体でも式です。
mul(x,y) = x * y mul(a, mul(2, a))では、この式の 値 を計算してみましょう。
仮に、 変数 a の値が 4 であったとします。 その上で、特定の順序で式を計算して行きます。 例えば、以下の様に。
mul(a, mul(2, a)) = mul(4, mul(2, a)) = mul(4, mul(2, 4)) = mul(4, (2 * 4)) = mul(4, 8) = (4 * 8) = 32これで、 mul(a, mul(2, a)) の値が 32 であることが計算されました。 この過程では、式の変換が次々と行われています。具体的には、
この結果、これ以上簡単化できない時点に到達すると、我々はそれを「式の値」と考えます。 つまり、この場合 32 という定数値が求まったのです。 実際に、DrScheme の Step 実行の機能を使って試してみましょう。
以上、当り前とも思えることを改めて考えて来たわけですが、 これをまとめると以下のようになります。
簡単化に向けておこなう式変換(conversion)のことを 簡約(Reduction)と呼びます。 また、式を簡約していき、その値を求める操作を 式を「評価(Evaluation)」するといいます。
前の部分で、 式を評価して値を返すといっていましたが、より厳密にはこのような意味です。