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