no_picture

Ruby で モナドを書いてみた。

ちょっと気分転換したかっただけで、反省している。(2015年4月11加筆修正) 記事を書く目的があったわけでも、何か確認したかったわけでもないけど、自分的に得るものがあったので、それを書いておきます。 Rubyでモナドをつくってみました。 ソースコード モナドってモノイドに名前が似ていることからわかるようにモノイド的な特性があるらしいです。 Wikipedia:モノイド 今回の話は、モナドだと簡単にモノイドが作れるという話のような気がする。 結合律 モノイドであれば結合律が成立します。 結合律をプログラミングに当てはめてみると func1(); func2(); func3(); という命令列があった場合 func1(); func2(); func3(); と func1(); func2(); func3(); は等価と言えるという話にできます。 違いがよくわからないので、別名をつけてまとめてみます。 funcX(); // funcX () { func1(); func2(); } func3(); func1(); funcY(); // funcY () { func2(); func3(); } どちらも同じように動きますよね。 セミコロンを演算子とみたててみます func1 ; func2 ; func3 最後のセミコロンはみにくいので削除しました。 (func1 ; func2) ; func3 == func1 ; (func2; func3) 単位元 単位元の存在 - 演算してもコンテキストが変化しない値が存在する プログラムでいえばセミコロンだけでかこまれていればそんな感じになりそうです。 func1; ; // あってもなくても変わらない func2; かけ算で考える

no_picture

プログラムミングにおけるモナドと圏論との対応。

説明するわけではないです。メモです。 Kleisli圏 をキーワードに調べると気になるということがわかったのでメモしておきます。 その中で気になったもの tnomuraのブログのブログ - モナドのKleisli圏 関数型プログラマのためのモナド理論 はじめての圏論 その第1歩 単にHaskellをするのに圏論の理解は不要です。使うだけなら馴れるだけで十分だと思います。モナドの表現力がどのようなところまであるのか、そのあたりを知りたいのです。