bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

オペレーショナル・モナドで天国と地獄を行ったり来たり(1)

1.リスト処理を見やすく

前回の記事で米田の補題を説明するためにリスト処理を用いたが、だいぶ難解であったことと思う。ここでは、リストの構造を見える形にし、オペレーショナル・モナドを用いたときに、リストの処理がどのようになるかをできるだけ分かりやすく説明する。

最初に全体を把握するために、リスト処理の概念図を下図に示す。
f:id:bitterharvest:20140919105123p:plain
この概念図は二つの世界に分かれている。一つは論理の世界できれいな世界、天国である。他の一つはきれいではない現実の世界、地獄である。論理の世界では、再現性が保たれていて、副作用(悪影響を及ぼすもの)は生じない。現実の世界では、環境が変わると同じ操作をしたとても現れる結果が同じになるとは限らない。プログラマにとっては前者は天国、後者は地獄である。

概念図の真ん中にリストがあるが、これは実際に、作りたいものである。論理の世界ではその構造が示されている。現実の世界では、現在作成されている「生もの」としてのリストである。今回のリストも長さ注釈つきのリストであるが、その構造は、データベースでよく用いられるレコードを用いて表現されている。contentと呼ばれるフィールドはリストそのものを有している。lengthと呼ばれるフィールドはリストの長さを有している。

概念図の一番下にあるのは、リストを作るときの命令である。論理の世界では、NilとConsが用意されている。現実の世界では、それらに対応して、nilとconsが用意されている。論理の世界から現実の世界への命令の変換は、関数singletonで行われるが、これは米田の補題のところで現れた関手である。米田の補題によって、それぞれ対応する命令は、世界が違っても、等価であることが保証されている。

概念図の一番上はプログラムとその解釈との関係を示したものである。プログラムは、現実世界の命令列によって与えられる。このプログラムは、命令を一つずつ順番に取り出し、解釈し、実行するという操作を繰り返す。命令は現実の世界にあるが、その解釈を行うのは論理の世界である。従って、プログラムの実行を介して、現実の世界と論理の世界、即ち、地獄と天国を行ったり来たりすることになる。これは、一般にモナドが持つ性質である。