Archive for November, 2006

Applicative / Traversable を勉強する

Posted by on Monday, 20 November, 2006
>GHC 6.6 から(というか base-2.0から)入った Control.Applicative と Data.Traversable (と Data.Foldable) が何がなんだかさっぱりわからなかったので、 >リファレンス >に挙げられている論文2編を読んでみた。 > >いやーすごいわけがわからない。 > >いや、読めば何が書いてあるかはわかるのだが、自分が活用できそうな気がしない。ともかく、まぁ、リストなどのデータコンテナとかモナドとかをジェネリックに操作するための手段であるということはわかったのだが、どういうときに便利になるものか、想像がつかない……。 > >The Essence of the Iterator Pattern という J. Gibbons の論文の末尾では repmin 問題というのがあったのでこれを紹介したい。あるところに整数を要素とする二分木のデータがあって、すべてのノードのデータを、木全体のなかの最小値で置き換えなさいという問題。ただし制限があって、木全体のトラバースを1回しかやってはいけない。 > >これを Traversable を駆使して解くのだが、最初はさっぱりわからなかった。コードはリンクを辿ってじかに論文を読んでほしいが、じっくり読んで、解きほぐしていくと理解できた。端的に言うとこういうことだ。ノードの各データは「最小値」にとにかく束縛しておくわけだが、この最小値は遅延評価されている、いわば計算の予約(サンク)になっている。で、ノードをたぐっていくとサンクの計算が進むように定義されている。逆に、最小値を計算しようとすると全要素をトラバースして最小値を計算するわけだけれども、同時に計算結果のノードもいっしょにメモリ上にマップされる。と書きくだしても禅問答だな。 > >な……何を言っているかわからないと思うが俺も(最初は)わからなかった……。遅延評価とか型クラスとかそんなチャチなもんじゃねえ、もっと恐ろしいものの片鱗を味わったぜ……。 > >という感じ。いや、なんかそんな大層な話ではないと思いますが。 > >あと、実際の GHC 6.6 と、これらの論文ではいろいろ違いがあってけっこうしんどかった。 Monad は直接には Applicative ではないので(WrappedMonad が定義されるようだ)うまくないのだが、あるいは Data.Traversable のなかの定義を探るともっと便利な関数がいっぱいあるのかも。写経だけでそこは弄ってなかった。 >

darcs日本語情報

Posted by on Sunday, 19 November, 2006
> >http://www.city5.org/darcs/wiki.cgi?page=FrontPage > が見た目あんまりにも寂しいので、フロントページをちょっと再編。チュートリアルを書こうかと思っていて、じつは途中まで書いているのがあるんですが、それも掲載しようかと思っています。 > >どうでもいいけど、 wiki のページのフッタに Copyright 表示があるのが微妙に気になるな。どうしたもんでしょうこれ。モロにオレの名前なんですが、誰かが編集したとしてもオレの著作物だってことになっちゃう、という主張になるわけかな、これは? むむ。 > >まぁデフォルトがそうなっている、ということはわからないでもないが、さてどうなんだろうねと。…… Creative Commons にでも、してみる? > >仮にそうしたとして、そのとき、フッタにそのような記載があるということは「編集・書き込みをした人間はその権限である」ということに同意したとみなして良いのか? > >ええっとそうだな、たとえば「派生を許可、ただし同じ権利で配布する同意した場合のみ」のライセンスであるとして、wikiページを編集したとすると、その行為は「派生」に該当すると考えてよさそう、な気がする。しかし、新しくページを作るとするとどうなんだろう。書籍が特定のページだけで成立していないように、辞書が特定の項目だけで辞書ではないように、あるwikiのページ群全体として「著作物」とみなして、ページの作成も派生に相当する行為であるとみなせるのかな。 > >うーん、なんかよくわからなくなってきた。wikiというメディアとcreative commons の関係は、きっと議論がいっぱいされているのではないかと思うのだが、さて、どこから辿れるだろうか。 >

lingr

Posted by on Sunday, 19 November, 2006
>そういえば web のチャットサービス >lingr > を遅ればせながら見てみたら、タグクラウドにはどーんとデカく「日本語」があり、それだけならまだしも残りが「Gauche」「Lisp」「LL」「Programming」となっていて、ここはいったいどういう世界なのだろうと思った。 > >今はまぁ、そんなスゴいことにはなっていないけれど。単に Gauche の人たちが活発に活動しているだけなんですが、すごいなぁと。 >

そういえばRHG後の飲みの会話で出てきたことなのだけど

Posted by on Sunday, 19 November, 2006
>2chのHaskellスレで「ぜったいあれはさかいさんに違いない」と思っていた書き込み主がいたのだが、伝え聞くところではさかいさんではなかったらしい。 > >世の中は広い。 >

ふつける読書会

Posted by on Saturday, 18 November, 2006
> >ふつける読書会 >
だった。終わってしまった。早いなあ。というか、ほかが長いのか。脱線しすぎて。
>

かけ算を「指折り数える」こと

Posted by on Friday, 17 November, 2006
>で、話はすこし変わるんだけど、欧米の児童文学とかを読んでいると、主人公の少年少女がわりと小さな数を「指折り数え」ていることがある。あれって昔から疑問で、いったい何のどういう計算ができなくて、どのように指折り数えているのかということがわかんないわけです。 > >こっからは数年前の『ニコリ』からのパクりなんだけど、あれはかけ算なんだという。6-9同士のかけ算については、日本では「九九」でやるのだが、欧米では5×5までしかやらんのだそうだ(でもないのか、よく知らん)。 > >でまあカリキュラムのことはさておき、「5×5までのかけ算」は覚えているという前提で、6-9同士のかけ算を「指折り数える」方法というのが確立されているのだそうだ。これは次のようにする。例として6×7を計算してみる。 > >まず、それぞれの数だけ指を折る。5を越えたら折り返す。すると、たとえば左手は指が1本だけ、右手は指が2本だけ立っている状態になる。 > >立っている本数同士をかける。1×2=2 > >立っている本数同士を足す。1+2=3 > >で、ベースを25として、立っている本数同士を足したぶんだけ、5を足す。つまり25+3×5=40 > >この結果に最初のかけたものを足す。40+2=42 > >これが答え。 > >3番目の手順がたいへん面倒だが、立っている本数だけ「25→30→35→40」と数えるのだと思えばそれほどしんどくはないかも。ま、つまり、こういう「指折り数える」方法論があるわけだ。あーちなみになんでこれがあっているかという話だけど、せいぜい中学生でわかることなので皆さんおわかりですね? > >あとこれだと 1-5×6-9の計算はうまく行かないのだけど、ちょっとした応用で似たように「指折り数え」られるかもしれない。実際にどうやっているのかは知らんけど、似たような簡単な方法はすぐ思いつく。 > >ええっとそれで前段との関係だけど、まあ、かけ算の九九を覚えていないような幼い人間にとっては、線を引くメソッドも有効かもしれませんね、ということです。 >

それ何て「ナンバー計画」?

Posted by on Friday, 17 November, 2006
> >線を引くだけで簡単にかけ算を解く方法 >
はてなブックマークを150件ちかく集めている人気エントリですが、どう見ても筆算と同じです。本当にありがとうございました。
> >わかってない人はよーく考えてみよう。「3本の線」と「7本の線」の交点は当然、21箇所あるわけ。だから、1つの纒まりごとの交点の個数は、1ケタ同士のかけ算になる。それをぜんぶ数え上げる=足している。本当にまったく何ひとつ、筆算と変わるところはありません。違いは、1ケタのかけ算を計算させないこと、可算を計算させないで数え上げていること。どっちが楽ですか?っていうと、ふつうの日本人は九九くらいはできるので筆算の方が圧倒的に楽でしょう。 > >これに素直に感心する人がけっこういるみたいですが、皆さん小学校の算数はやってこられなかったようですねとしか言いようがありません。 > >ま、こういうのって見せ方なんだよなぁ、って結論で。 > >あーちなみにタイトルですが、アイザック・アシモフの短篇集『停滞空間』でも読んでおくように。 >

Ruby の本勉強会

Posted by on Thursday, 16 November, 2006
> >http://wiki.fdiary.net/RubyBookReading/?0001 >
に行ってきたことであった。
> > >秋葉原ダイビル13F、東大の秋葉原拠点というところ。新しくて綺麗で実に羨ましい設備だった > > > >timedia でやるのと同じスタイルで、ひとりがずっと音読していって、好きなタイミングでインタラプトをかけるというタイプの「読書会」 > > > >何度か自分で止めたけど、これは「初心者は声を上げづらいのではないか」という懸念が(いちおう)あってのことだったけど、どのレベルの質問が良い質問なのか、というのはけっこう難しい問題で悩みどころだったり > > > > >というわけで、自分はさすがに教える側であったのであってこれはちょっと目論見とは違っていたけど(平均ちょい上くらいのレベルかなあと思ってた)、むしろこれくらいの立ち位置であったからこそ、非常にためになったかも。ささださんを観察しながらいろいろ学ぶところが多かった。いや特に目的があってそうしているわけではないんですが。 > >あと『プログラミングRuby』を見ていて思ったのだけど、本のつくりがそもそも「第二の言語としてRubyを学ぶ」ことが前提になっているねぇという感じ。Javaのようなオブジェクト指向言語と、 perl か awk か何でもいいけどスクリプト言語、フルに使える必要はないけどなんとなく知っている、くらいのレベルの想定なんじゃないでしょうか。いきなりオブジェクトとかいう単語が出てくるけど、「まぁ知ってるでしょ? もっと細かい話はあとでやるから」という感じ。っとこれは本の感想。 >

昨日の日記、あるいは mercurial について

Posted by on Thursday, 16 November, 2006
>また上げわすれ。 Mercurial は、あのあとパッケージインストールしようとして気付いたけど python で書かれているらしい。ふぅーむ。どんなもんなんですかね。 > >あと、さいしょに「遅い」と書いちゃうとみんなそんなイメージになっちゃうからあれかもしれないけど、遅い遅いと言われる darcs ですが、ふつうに使っていればまったくストレスないですよ。遅いのはねぇ、最初のチェックアウト=レポジトリコピーのときは、 svk でいうミラーリングの処理なんで時間がかかるんですよ。でもそれは分散バージョン管理の宿命だよね、という気がするんですが(gitはその辺がちょっと速そうなイメージ)。 > >なので、 fast and lightweight のうち後者はともかく前者はどこまでホントなのかな、というのが疑いの目を向けているところ。 > >でもまぁ試してみないと話にならんのだが、日本人で使ってみている人間というのはいるんだろうか。 > >あ、あった→ >http://www.selenic.com/mercurial/wiki/index.cgi/JapaneseTutorial > > >ところで、 darcs も簡単な使い方例みたいなチュートリアル記事を書こうかなぁと画策中です。あのマニュアルは使いはじめたら案外たいしたこと書いてなくて良いマニュアルなんですが、最初に面倒くさそうな原理原則が書いてあるあたりがちょっと、とっつきにくい。 >

デモンストレーション

Posted by on Wednesday, 15 November, 2006
> >http://www.cp.cmc.osaka-u.ac.jp/~kikuchi/weblog/index.php?mode=comment&UID=1163435860 > そうそう「反証実験」じゃなくて「デモンストレーション」ですよね。 >前 >にはうまい言葉が思いつかなかったけど。 >