Ch.7 MLプログラミング入門

§ 7.3. 式の組み合わせによる計算の表現

前節の階乗の計算では,引数が0の場合は1を返し,それ以 外の一般のnの場合は,n * fact (n - 1)を返すようにプログラム されていました. このように,関数が返すべき値は,値を表す式で表現されます. 最初の場合の1も,値そのものではなく,ゼロという値を表す式 とみなします. n * fact (n - 1)は,変数nと関数を含む式です. 一般にML言語の大原則は,

MLのプログラミングは,必要な値をもつ式を定義することを通じて行う

というものです.

式は以下の要素を組み合わせて構成されます.

  1. 0などの定数式

  2. 関数の引数やすでに定義されている値を表す変数

  3. 関数呼び出し

  4. 関数を含む種々のデータ構造の構成

1から3までの組み合わせは,高校などで慣れ親しんだ算術式と同じ構 造を持っています. 例えば,1からnまでの自然数の2乗の和 Sn=12+22++n2 は以下の公式で求められます.

Sn=n(n+1)(2n+1)6

この式は,MLで直接以下のようにプログラムできます.

val Sn = (n * (n + 1) * (2*n + 1)) div 6

*divはそれぞれ自然数の乗算と除算を表します. この式はnが定義されていれば,正しくSnの値を計 算します.

# val n = 10;
val n = 10 : int
val Sn = (n * (n + 1) * (2*n + 1)) div 6;
val Sn = 385 : int