7.12 MLにおける手続き的機能
これまで学んできた通り,式の組み合わせでプログラムを構築していく ML言語はプログラムを宣言的に書く上で最も適した言語の一つです. これまでに,関数などの算術演算を行う関数を例に説明しました が,第7.2節で説明した通り,宣言的とは,意図す る意味をできるだけそのまま表明するということであり,決して数学的な関数と してプログラムを書いていくことが望ましい,との表明ではありません.
もし,実現しようとしている機能が,手続き的な操作によって最も簡潔 に表現し理解できるなら,その手続きをそのまま表現するのが望ましいはずです. 例えば,みなさんが今ご覧のディスプレイに文字を表示する操作は,こ れまでに書かれている内容を別な情報で上書きする操作であり,具体的には, ディスプレイのバッファを書き換える手続き的な操作です. ディスプレイに限らず,外部との入出力処理は,外部の状態に依存する 本質的に手続き的な操作です. そのほか,例えば新しい名前や識別子の生成などの処理,さらに, サイクルのあるグラフの変換なども,手続き的なモデルで理解しプログラムした ほが,より宣言的な記述になる場合が多いと言えます.
このような操作をプログラムで簡潔で分かりやすく表現するには, 手続き的な処理が記述できたほうが便利です. 式の組み合わせでコードを書いていくことが基本である関数型言語にこ のような手続き的な処理を導入するために必要なことは,以下の2つです.
-
1.
状態を変更する機能の導入. 例にあげたディスプレイの表示内容は,抽象的にはディスプレイの状態 と捉えることができます. 手続き的なプログラムの基本は,この状態を変更することをくり返し目 的とする状態を作りだすことです. そのためには,変更可能なデータが必要となります.
-
2.
評価順序の確定. ディスプレイの表示内容の変更操作が複数あった場合,それらの適用順 序によって,どのような像が見えるかが決まります. 従って,手続き的なプログラムを書くためには,変更操作がどの順に行 われるかに関する知識と制御が必要となります.
MLには,これら2つが関数型言語の枠組みの中に導入されています.