コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Eed3si9n/モナド (プログラミング)

計算機科学におけるモナドとは、関数型言語において参照透過性を維持しつつ手続き型的な記述を行なうための枠組みを言う。主にプログラミング言語Haskellで用いられる。

元来はI/O等の副作用を伴う処理や、順序処理を自然に記述するために導入された。後に様々な領域でモナド形式による表現の有用性が発見され、現在では「モナド化」はHaskellプログラミング全般に強力な理論基盤を与えている。

モナドの名称は、圏論モナド(モノイド+トライアド)に基づいており、ライプニッツモナド(単子論)とは無関係である。

概要

[編集]

遅延評価をデフォルトでもつ純粋関数型言語では、実際の処理がどのタイミングで行なわれるのか予測することが難しく、またシステムの状態を保持して処理の流れを変えるような記述は困難である。

モナドでは処理手順と型を構造化することで、局所的に手続き型に近い記述形式を導入し、自然な形で副作用や順序処理を埋め込んでいる。

言語が参照透過性を保つ限り、どこかに格納された値を書き換える事は不可能であるが、逆に言えば、どこにも格納されていない値であればどんな数値を取っても良い事になる。関数型言語でこれに適合するのは関数のリターンである。都合の良い事に、関数のリターンは必ず内部で呼び出した関数が全て終了してから行われるため、下位→上位というリターンの順序が崩れる事もない。

この性質を利用し、順序処理を関数の入れ子に、また関数自体の値と平行して副値を走らせることで「副作用」をパッケージ化するというのがモナドのコンセプトである。通常の文法の範囲内でもモナドと近い処理は可能だが、プログラムが非常に書きづらい形になるため実用的とは言い難い。