著者
香川 考司 Koji Kagawa 京都大学数理解析研究所 Research Institute for Mathematical Sciences Kyoto University.
出版者
日本ソフトウェア科学会
雑誌
コンピュータソフトウェア = Computer software (ISSN:02896540)
巻号頁・発行日
vol.11, no.5, pp.377-386, 1994-09-16
参考文献数
18

破壊的代入,入出力などの副作用を関数型言語で模倣するプログラムを書く際に,副作用をmonadというある種の条件を満たす型構成子として表現すると,プログラムの可読性,変更のしやすさなどが増すことがわかってきている.しかし,従来では代表的な副作用である"状態"を扱う場合に,1つの(平板な)構造しか状態として扱うことができず,関数型言語の特徴の1つである,組やリストなどの階層的データをその構造を生かして状態として扱うことは難しかった.その結果,状態を扱うプログラムをこれらのデータ型を介して部品化することができないため,あるデータ型の状態を対象として書かれたプログラムの部品を,他のデータ型を状態として持つ場合に再利用することが難しく,関数型言語にmonadを導入する動機の1つである命令的プログラムの書換え,再利用の容易性が達成されたとはいい難かった.例えば,配列を2つ以上扱いたい時に,どのように配列を1つだけ扱うプログラムの部品を再利用してプログラムを書けばいいのか,その方法がわからなかった.この論文では,階層的なデータ型の中の構成要素の"位置"をmonad morphismとして表現し,その位置にあるデータを局所的状態として扱うことにより,複合的,階層的なデータをその構造に自然な形で状態として扱う方法を提案する.その結果,プログラムの部品化を容易に行なうことができるようになる.結果としてのプログラミングのスタイルは,オブジェクト指向プログラミングを思い起こさせるものとなる.ここでは,オブジェクト指向との対応についても述べる.