まず、一貫して、式を評価すると値が返る といってきました。 C や Java といった手続き型言語なら、 順番に文を実行するという感覚を 持っているんじゃないでしょうか?
次に、代入文というものを教えていません(しばらく教えません)。 手続き型言語では、代入文を使って変数などの状態 を更新しながらプログラムを実行することが多いでしょう。 でも、関数型では異なります。
数学における「関数」 f とは、集合 X の各要素 x に 集合 Y のある要素 y = f(x) を対応付けることです。このとき、 f は X から Y への関数として、下のように表記されます。
f: X -> Yここでポイントは、 x に対して y が一意に定まると言うことです。
数学においては、関数を
f(x) = x * 2などと定義することができます。 この場合、関数 f は 引数 x に対して(左辺)、 その2倍の数を対応させる 式 (右辺) として 定義されています。
関数プログラミングにおいても、 計算手続きをこのような性質を持った 関数(function) として 定義 します。 そして、これらの関数をもちいて 与えられた 式 の 値 を計算して求めると言うのが、関数プログラミングの概観です。