ナカナカピエロ おきらくごくらく

写真付きで日記や趣味を書くならgooブログ

呆れた日曜の過ごし方

2014-11-10 00:03:31 | 日記
呆れた日曜の過ごし方

7時半起床。

昨日はバファリンを飲んで8時ぐらいには床についていたので睡眠は十分。とりあえず朝飯食って寝る。と言いながら、「Land of Lisp」 O'REILLY(P.56/470)読了。うつらうつらしていたので、昼過ぎまで寝る。

その後がいけなかった。別ブログに書いたが、Haskellの「モノイドとモナド」を理解しておこうとWebで調査したのが、悪かった。延々と夢中になって調べてしまった。途中、おつかいをしてシャワーを浴び洗濯。大河ドラマ「軍師官兵衛」を見ながら夕食。それが終わっても調査。結局、「モノイドとモナド」は理解できず、挫折。

情けなや。もっと有意義な日曜日の過ごし方があろうに。頭痛がしてきたので、バファリンを飲んで寝ます。明日、心療内科の先生と相談しよう。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

モノイドとモナド

2014-11-10 00:02:14 | 日記
モノイドとモナド

Haskellを勉強する前にモノイドとモナドについて気になったのでWebで調べてみた。

モノイドとは二項演算と単位元をもつ代数的構造である半群である。二項演算子は結合律を満たす。通常、演算の対象である集合”S”と二項演算”・”の組(S,・)で表す。そして計算理論的にこの構造をプログラムに当てはめる。

ただプログラムにおける関数は常に引数を持ち、返り値をもつとは限らない。例外が発生する場合もある。外部変数によって値が変わったりする。このような副作用を持つことからプログラムとは集合の写像ではない、クライスリ圏の射であるという考え方ができて、その合成規則(クライスリトリトリプル)のことをどうやらモナドと呼ぶようだ。こうするとすっきりと理論づけられるそうだ。

Meの苦手な圏論に出くわしてしまった。とりあえず用語説明。

圏(category)
対象と射(対象間の構造を保つ対応関係)によって表現される代数的構造
射(arrow, morphism)
圏で対象間の対応関係を表現
関手(factor)
2つの圏間の構造を保持するマッピング。

ということはモノイドというのはある意味、圏であり、モナドというのは関手の一種であるということができる。

そしてすんなりいかないプログラミング言語の性質(副作用)の制御に使われるモナドについて、ワドラーはこう語っている。「モナドは単なる自己関手の圏におけるモノイドの対象だよ。何か問題でも?」。。。分からん。

で、なんでこんな概念が必要か?の答えが、どうも「参照透過性を守る」ためだそうだ。要するに「関数に同じものを入れたら同じ結果が必ず返ってくること」を保証するために、わざわざこんな大掛かりな数学的概念をひっぱり出してきたらしい。例えば時刻なら、「関数に時刻を調べさせる」のではなく、「時刻を操作する関数を用意して、その引数に「何を調べるのか」を決めた関数を指定すればいい」というようなことらしい。関数型言語は関数もデータとして扱うから、こんな考え方もありなのかもしれない。ちょっとオブジェクト指向に似ているかも。。。いやいや関数指向と言った方が正しいか。。。

クライスリトリトリプルというくらいだから、単なる写像の合成規則だけではなく、もう一つメタレベルの合成規則がいるのかもしれない。。。そして、トリプルというぐらいだから、これはどうも例外状態を含めコンテキストを記憶させながら、関数を実行するのに都合がいいらしい。

ということで関数を駆使して一気に計算できてしまうということらしいが、はっきり言って、全然分からん!後はHaskellを勉強するときにじっくり学べばいいかな。この辺りを簡単に理解することは無理なのか。。。とりあえず今の本を読み終えたら、「すごいHaskellたのしく学ぼう」を読むとするか。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする