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

§ 7.2. 宣言的プログラミング

時折,関数型プログラミングは「宣言的」であると言われます. この言葉は厳密な技術的用語ではなく,プログラムが実現したいことそ のものの記述するといった意味の曖昧性のある言葉です. しかし,これから書こうとするプログラムが表現すべきものがあらかじ め理解されている場合,宣言的な記述は,より明確な意味を持ちます.

書こうとするプログラムが入力を受け取り出力を返す関数と理解できる 場合,そのプログラムを,入力と出力の関係を表す関数として直接表現できれば, より宣言的記述となり,したがってより分かりやすく簡潔なプログラムとなるは ずです. MLは,この意味でより宣言的な記述を可能にするプログラミング言語と いえます. MLプログラミングをマスターする鍵の一つは,この意味での宣言的プロ グラミングの考え方を身につけることです.

簡単な例として,数学の教科書で学んだ階乗を計算するプログラムを考 えてみましょう. 自然数nの階乗n!は,以下のように定義されます.

0!=1
n!=n×(n-1)!

MLでは,このプログラムを以下のように記述できます.

fun fact 0 = 1
     | fact n = n * fact (n - 1)

この宣言によってfactと言う名前の関数が定義されます. この定義は“|”によって区切られた2つの場合からなっています. 上段は,引数が0の場合は1を返すことを表し,下段はそれ 以外の場合,引数nn - 1の階乗とを掛けた結果を返すことを表し ています. それぞれが,上記の階乗の定義とほぼ完全に一致していることがおわかりでしょう.

このような単純な関数に限らず,種々のプログラムを,その意図する意 味に従い宣言的な関数として表現できれば,複雑なプログラムをより簡潔かつ分 かりやすく書き下すことができるかもしれません. プログラミング言語MLは,この考え方に従い,大規模で複雑な計算をプ ログラムする言語と言えます. 以下に続く節で,その基本となる考え方を学んでいきましょう.