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


関数型 とは? (直感的に)

Scheme の命令の簡単なところを述べて来ました。 ところでなにか、C や Java と異なるところは感じなかったでしょうか?

まず、一貫して、式を評価すると値が返る といってきました。 C や Java といった手続き型言語なら、 順番に文を実行するという感覚を 持っているんじゃないでしょうか?

次に、代入文というものを教えていません(しばらく教えません)。 手続き型言語では、代入文を使って変数などの状態 を更新しながらプログラムを実行することが多いでしょう。 でも、関数型では異なります。


関数型 とは? (理論の側面)

関数型プログラミングにおける「関数」は、 数学の「関数(function)」に近い性質を指します。

数学における「関数」 f とは、集合 X の各要素 x に 集合 Y のある要素 y = f(x) を対応付けることです。このとき、 f は X から Y への関数として、下のように表記されます。

	f: X -> Y 
ここでポイントは、 x に対して y が一意に定まると言うことです。

数学においては、関数を

	f(x) = x * 2
などと定義することができます。 この場合、関数 f 引数 x に対して(左辺)、 その2倍の数を対応させる (右辺) として 定義されています。

関数プログラミングにおいても、 計算手続きをこのような性質を持った 関数(function) として 定義 します。 そして、これらの関数をもちいて 与えられた を計算して求めると言うのが、関数プログラミングの概観です。


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