トップ 最新 追記

ohai日誌

2003|12|
2004|01|02|03|04|05|06|07|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|06|08|10|11|
2008|01|02|03|04|05|07|09|
2009|01|02|
2013|06|12|
2014|01|02|03|04|06|09|10|12|
2015|04|
2016|09|
2018|02|

2008年02月01日

_ MercurialのGUIフロントエンド(つくりかけ)

RubyとRuby/GTK2で作ったMercurial のGUIフロントエンドを置いておきます。 <URL:http://mono.kmc.gr.jp/~ohai/repos/xohwhall>に Mercurialのリポジトリとして置いてあります。

実用になる完成度ではないんですがRuby/GTK2のサンプルくらい にはなるでしょ。

自分では使わないようなものなので 途中で作るのに飽きたのですが、仕舞い込むくらいなら 公開してしまおうと。

WindowsとLinuxの両方で動くはずです。


2008年02月13日

_ コードを読む話

ソースコードを読むときは頭のなかでいちいちパースせずに 一種のパターンマッチをしているような気がする。

つまりある言語に慣れるというのは頭のなかにそういうパターンが 蓄積される、ということになるのだろう。

私がどうもLisp系の言語は読みにくいと思っているのもそういう 理由がある気がする。


2008年02月21日

_ 第23回 Ruby/Rails勉強会@関西

リフレクションだとか特異クラスだとかについての 話をしてきました。 発表資料。 難しいという人が多かったようです。 楽しんでくれた人も何人かはいたようでありがたいことです。

_ Haskellのモナド

まずはHaskellは関係なく、何か「あれをして、これをしてから、それをする」 というプログラムを考えます。つまりCで書くと

void 何か() {
  あれ();
  これ();
  それ();
}

というかんじのプログラムを考えます。 で、「あれをして、これをしてからそれをする」にかっこを付けて 「(あれをして、これをしてから)、それをする」と 「あれをして、(これをしてから、それをする)」と いうのを考えます。 「あれをしてこれをしてから、それをする」 「あれをしてから、これをしてそれをする」 となるわけです。で、当然この2つは結局同じことをします。 これは4つ以上になっても同じことが成立します。 「あれをして、これをしてから、それをし、どれをする」 みたいなのを考えると、 「((あれをして、これをしてから、)それをし、)どれをする」 を考えても 「(あれをして、これをしてから、)(それをし、どれをする)」 を考えても、その他のかっこの付け方を考えても 結局やることは同じなわけです。 このように順番が同じならかっこの付け方を変えても 結局同じものになる、という性質を結合則と呼びます。 つまり副作用があるような普通のプログラムは 上のような意味で結合則が成立します。

で、こういったことから「副作用」だとか 「普通のプログラム」だとかといった要素を取り除いて、 結合則だけに注目したのがHaskellのモナドです。 順番に並べてなんかする、というようなものであれば (そうすることによる利益はさておいて)モナドにできます。 Haskellに何とかモナドが沢山あるのはそういうわけです。

補足

上の話ではあれ()にもこれ()にもそれ()にも何か()にも引数 も返り値もありませんが、それではまともなプログラムは 書けません。そのため、モナドでは前の処理からの 結果を受け取ったり、自分が処理した結果を次に渡したり できるようになっています。 このあたりの工夫のため、モナドは多少複雑になっていますが、 できることも増えています。

補足2

Haskellに建前として副作用がないということになっています。 それは上の話で言えばHaskell内ではやることを順に並べるだけで そこから先には関知しないことになっているからです。 これは建前の話で実際は性能だとかその他様々な事情から もっとややこしいことをしています。


トップ 最新 追記