2002-04-22
λ. Formulating Haskell
Formulating Haskellを眺めてみる。
λ. 記号処理プログラミング
yppasswdのダミーを作って遊ぼうとしている人がいたので、ちょっとアドバイスしてみる。
λ. A first introduction to categories 読了
一応読了。最後の方のエクササイズはあまり解けていませんが……
λ. システムプログラミング
ポインタとか配列とか。退屈だったので「自分自身を指すようなポインタ型は宣言できないんですか?」とか質問してみる。出来ないのは知ってるのだけど、dereferenceがendomapになったら面白いかなとか思ったんで。
λ. 「1+1=2って本当?」 その2
いや、別に僕も言っている内容に興味があるわけではなくて、単に久野君をつっついて面白がっているだけです。
訊いてみると一応ペアノの公理あたりは知っていると言っているので、どうしてこういう疑問が出てくるのか確かに不思議だとは思うのですが。
λ. 論文読み会 "WOLF--A Novel Reordering Write Buffer to Boost the Performance of Log-Structured File Systems"
むずい。
λ. 帰り
みんなと一緒にごはんを食べに行こうかとも思ったけど、眠かったので、帰って速攻で寝る。
2004-04-22
λ. RDFからサイトを作るとか
RDFをXSLT等で整形して一つのページとして表示しているのは頻繁に見る。一つのページではなく、一つののサイトにするのはどうだろうか?、とふと思った。RDFのクラスに対して整形ルールを定義し、RDFの各ノードから個々のページを生成するとか……
λ. 萩野服部研新歓@八十の別家
なんとビックリ25人もの参加者。それから某サトレイ氏の恐ろしさの一端を理解する。
2005-04-22
λ. C304 裏切りの村 5日目
残っているのが8人で、内訳は共有者2人、占い師or狂人のアルビン、グレー5人で、人狼がグレーの中に2人いるはず。その場合狂人の可能性があるアルビンを吊るほうが有利か、それともグレーから吊った方が有利か?
実際に、素朴なモデルで確率を計算してみるとこんな感じ。プレイ中に実際に書いたメモでは木として書いてたけど、この日記に木の図を書くのは面倒なのでここではテーブルで代用してみた。経過は縦方向に、可能性の分岐は横方向に対応している。分岐するところでは括弧の中に確率を書いた。
また、幾つか仮定を置いている。灰の中の誰が人狼かは無作為だとしているし、灰の中の誰を吊るかも無作為だとしている。また、アルビンが狂人である確率とアルビンが占い師である確率は半々であり、アルビンの占い結果は一切信用しないことにしてる。それから、人狼側は共有者を襲撃し、またランダムに賭けるのは(翌日の無い)最終日だけとしている*1。
5日目 (残り8人) |
人狼/灰 = 2/5 | ||
---|---|---|---|
5日目吊り先 | アルビン | ||
6日目 (残り6人) |
人狼/灰 = 2/5 | ||
6日目吊り先 | 村人(3/5) | 人狼(2/5) | |
7日目 (残り4人) |
- | 人狼/灰 = 1/4 | |
7日目吊り先 | - | 村人(3/4) | 人狼(1/4) |
勝利 | 人狼側 (3/5 = 60%) |
人狼側 (2/5 * 3/4 = 30%) |
村人側 (2/5 * 1/4 = 10%) |
5日目 (残り8人) |
人狼/灰 = 2/5 | |||||
---|---|---|---|---|---|---|
5日目吊り先 | 村人(3/5) | 人狼(2/5) | ||||
6日目 (残り6人) |
人狼/灰 = 2/4 | 人狼/灰 = 1/4 | ||||
6日目吊り先 | 村人(2/4) | 人狼(2/4) | 村人(3/4) | 人狼(1/4) | ||
7日目 (残り4人) |
- | 人狼/灰 = 1/3 | - | |||
7日目吊り先 | - | 村人 (2/3) | 人狼 (1/3) | - | ||
アルビンの正体 | - | - | 狂人(1/2) | 真占い師(1/2) | - | |
ランダムで決まる吊り先 | - | - | 村人(1/2) | 人狼(1/2) | - | - |
勝利 | 人狼側 (3/5 * 2/4 = 30%) |
人狼側 ((3/5 * 2/4 + 2/5 * 3/4) * 2/3 = 40%) |
人狼側 ((3/5 * 2/4 + 2/5 * 3/4) * 1/3 * 1/2 * 1/2 = 5%) |
村人側 ((3/5 * 2/4 + 2/5 * 3/4) * 1/3 * 1/2 * 1/2 = 5%) |
村人側 ((3/5 * 2/4 + 2/5 * 3/4) * 1/3 * 1/2 = 10%) |
村人側 (2/5 * 1/4 = 10%) |
5日目更新直前に書いた確率計算はこれを元にしたもの。ちなみに、この計算は共有者のモーリッツさんの言っていた1/4という数字が理解できなくて、どうやったら1/4という数字を導けるか考えた結果なのだが、モーリッツ本人はランダム勝負が可能になった時点で人狼がランダム勝負に賭けると考えて、2回のランダム勝負を潜り抜ける確率の1/2*1/2=1/4と単純に考えていたらしい。真面目に考えてちょっと損した。
*1 自明とは思うが、一応理由を説明する。仮に6日目に投票先が人狼に決定され狼がランダム勝負に出たとする。ランダム勝負に勝てればいいが、もし負けた場合には最後の人狼がばれてしまうので、翌日にもう一度ランダムになる。したがって、その時点でランダム勝負に出る場合の狼側の勝率は 1/2 + 1/2 * 1/2 = 3/4 。一方、その時点ではランダム勝負に出ない場合には、翌日の吊りが最後の狼にあたる確率は1/3で、その場合でもランダム勝負が出来るので、狼側の勝率は 2/3 + 1/3 * 1/2 = 5/6 。最終日以外はランダム勝負に出ない方が狼側有利。
2006-04-22
λ. 超準解析のモナド
Wikipediaのモナドのエントリによると、超準解析では「ある与えられた超実数に対して無限に近い全ての超実数の集合」という意味でモナド(Monad)という言葉が使われているそうだ。知らなかった。そういえば以前ファンクターさんがmixi日記で書いていたモナドはこのモナドだったのだろうか……
λ. 「Haskellによる関数プログラミング入門」
日経ソフトウェアの6月号*1に「Haskellによる関数プログラミング入門」という記事を書かせていただきました。もうすぐ発売なので、もし良かったら読んでみてください。この日記の読者は関数型言語を既に知っている人が多いと思うので、そういう人には不要かも知れませんが(笑
「やさしい Haskell 入門」はあまりまじめに読んだことなかったんだが、自分で入門記事を書いてみて、あれは良く書けてるなと思った。分かり易いかといえばまた別だとは思うけど。
【2006-04-24追記】 発売されました。 補足や訂正などはおいおいwiki:Haskellによる関数プログラミング入門の方にでも書こうと思います。
*1 4月24日発売
2007-04-22
λ. 携帯機種変更
これまで約3年使っていたA5403CAからW43CAへと機種変更。
学生時代は携帯はさほど重要ではなかったけど、社会人になって自分のPCに触れられる時間が著しく減ったため、携帯電話が重要になった。赤外線通信とPCサイトビュアーとQRコード読み取り機能が欲しくなったのが機種変更の主な理由。
しかし、慣れない機種に変更して思ったが、携帯のインターフェースって最悪だと思う。
例えば、ニュースフラッシュという機能がある。 勝手に無料でニュースを受信してくれて重宝しそうなのだけど、ニュースを受信するたびにメロディを鳴らされたりバイブを振動させられたりすると結構邪魔。 そこで、設定でメロディを消音にしバイブも無効にした。 マナーモードにしない場合にはこれで邪魔にならなくなるのだが、マナーモード(通常マナー)にしているとバイブが振動してしまう。 これはあまりに馬鹿げた設計だと思う。 ちなみに、FAQ「EZニュースフラッシュ関連 マナーモードで、EZニュースフラッシュの受信時にバイブレータを振動させないようにするには?」によると、マナーモードを「オリジナル」に設定して、個別に設定しなくてはならないとか…… (唖然
λ. 床屋
に行って、さっぱりしてきた。
λ. 古典と現在 #1 ガイダンス
を観た。
2008-04-22
λ. “The Essense of the Iterator Pattern” by Jeremy Gibbons and Bruno C. d. S. Oliveira
The Iterator pattern gives a clean interface for element-by-element access to a collection, independent of the collection's shape. Imperative iterations using the pattern have two simultaneous aspects: mapping and accumulating. Various existing functional models of iteration capture one or other of these aspects, but not both simultaneously. We argue that McBride and Paterson's applicative functors, and in particular the corresponding traverse operator, do exactly this, and therefore capture the essence of the Iterator pattern. Moreover, they do so in a way that nicely supports modular programming.We present some axioms for traversal, discuss modularity concerns, and illustrate with a simple example, the wordcount problem.
を読んだ。
Applicative Programming with Effects (c.f. ヒビルテ(2006-12-07)) の applicative functor を使ってイテレータパターンの本質を解き明かす。 HaskellのData.Traversableモジュール辺りはこの論文に基づいている。