関数型(functional)とは? (2/4)


式(expression)

もう少し、式の構成要素を見て行きましょう。 例は、先程の関数定義の実体部(右辺)です。

先程の x * 2 には、 x, *, 2 という要素が入っていました。 x 変数です。 2 定数です。 * は積演算です。 で、

ところで、 * という積演算は当然 関数の一つです。 この様に は、変数と定数と関数を組み合わせたものと 考えることが出来ます(*)。 変数それ自体でも式ですし、定数それ自体でも式です。


値(value)

先程、関数プログラミングとは、式の値を求めることだと言いました。 もっと複雑な式を考えて見ましょう。
	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 実行の機能を使って試してみましょう。

以上、当り前とも思えることを改めて考えて来たわけですが、 これをまとめると以下のようになります。


評価(Evaluation)

関数プログラミングにおいては、プログラムを関数定義として与え、 与えられた式の簡単化の過程を計算(プログラム実行)として見立てるというものです。

簡単化に向けておこなう式変換(conversion)のことを 簡約(Reduction)と呼びます。 また、式を簡約していき、その値を求める操作を 式を「評価(Evaluation)」するといいます。

前の部分で、 評価してを返すといっていましたが、より厳密にはこのような意味です。


99.9.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp