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

§ 7.12. MLにおける手続き的機能

これまで学んできた通り,式の組み合わせでプログラムを構築していく ML言語はプログラムを宣言的に書く上で最も適した言語の一つです. これまでに,関数などの算術演算を行う関数を例に説明しました が,第7.2節で説明した通り,宣言的とは,意図す る意味をできるだけそのまま表明するということであり,決して数学的な関数と してプログラムを書いていくことが望ましい,との表明ではありません.

もし,実現しようとしている機能が,手続き的な操作によって最も簡潔 に表現し理解できるなら,その手続きをそのまま表現するのが望ましいはずです. 例えば,みなさんが今ご覧のディスプレイに文字を表示する操作は,こ れまでに書かれている内容を別な情報で上書きする操作であり,具体的には, ディスプレイのバッファを書き換える手続き的な操作です. ディスプレイに限らず,外部との入出力処理は,外部の状態に依存する 本質的に手続き的な操作です. そのほか,例えば新しい名前や識別子の生成などの処理,さらに, サイクルのあるグラフの変換なども,手続き的なモデルで理解しプログラムした ほが,より宣言的な記述になる場合が多いと言えます.

このような操作をプログラムで簡潔で分かりやすく表現するには, 手続き的な処理が記述できたほうが便利です. 式の組み合わせでコードを書いていくことが基本である関数型言語にこ のような手続き的な処理を導入するために必要なことは,以下の2つです.

  1. 状態を変更する機能の導入. 例にあげたディスプレイの表示内容は,抽象的にはディスプレイの状態 と捉えることができます. 手続き的なプログラムの基本は,この状態を変更することをくり返し目 的とする状態を作りだすことです. そのためには,変更可能なデータが必要となります.

  2. 評価順序の確定. ディスプレイの表示内容の変更操作が複数あった場合,それらの適用順 序によって,どのような像が見えるかが決まります. 従って,手続き的なプログラムを書くためには,変更操作がどの順に行 われるかに関する知識と制御が必要となります.

MLには,これら2つが関数型言語の枠組みの中に導入されています.