2009-01-01から1年間の記事一覧

モナドの分類

モナド型クラスに属する型はいろいろとあって、その中にはさらにMonadPlusをサポートするモナド型があったり、そうでないものがあったりするわけで、これはつまりいろいろなモナド型を2種類に分類しているわけですよね…IO (Maybe a)という型のモナドのコー…

実は関数もモナドとして捉えることができる

関数(a->b)はそのままArrowのインスタンスになっているわけなんですが、実はモナドのインスタンスとしても機能できることに気づきました…ステートモナドとかを見れば何の秘密にもなっていないことなんですが…「関数もモナドのインスタンスとして扱える」とい…

unwordsのコスト

Haskellで遊ぶよ さんのunwordsはO(n^2)?を読んで、unwordsのコスト、僕も考えてみました。コストはひょっとしたらO(n)なような気がしています。なぜかというと、unwordsがfoldrを使っているからかもと…間違ってるかもしれませんが…foldrはright associative…

ずらしてみよう

ずいぶんとご無沙汰様になってしまいましたが、まだまだ遊んでますよー。Haskellで… Haskellで遊ぶよさんの takeWhile2とdropWhile2 を読んでいてちょっと前にどこかのプレゼン資料で見たちょっと感心したテクニックを思い出しました…takeWhile のシグネチャ…

IArrayの怠け度合い

今日はちょっとしたメモ…リストのレイジーな振舞い方は割りとはっきりとイメージできるのですが、ちょっと遊びでIArrayを使っていて遅延評価がどういった形で動いているのかが気になったので、ちょっと実験してみました。IArray、つまりImmutableなArrayを作…

Programming Windows in Haskell、次の一歩。

もうかれこれ半年以上前のポストの続きになるんですが、なんというか、HaskellでWin32を直にたたくスタイルでGUIアプリを書いてみたわけなんですが、前回挫折したのは、ウィンドウごとのステートをどうやって保持するかというところだったわけです。IORefを…

PEGパーサーのバックトラッキング

前回、どちゃっと乗せたPEG電卓のコードなんですが、これはPappyやFrisbyのようにメモ化をまったくやっていないPEGパーサーです。ちょっと思いついて、いったいどれくらいの勢いでバックトラッキングが起きているのかを調べてみました。 バックトラッキング…

PEG電卓をやってみた

前回のポストから日数がたってしまいましたが、たまにはちゃんと最後まで書こうということで、出来上がったPEG電卓のコードを乗せておきます。パーサーの定義が前回までのポストとは微妙に変わっていますが、大筋は同じです。こっちのほうがコンパイルして動…

PEGパーサーを書いてみる:後半

前回、シグネチャだけで終わっていたパーサーを実装してみました。 seqP :: Parser i o -> Parser i o -> Parser i o seqP p q = do v ([o] -> Parser i o) -> Parser i o -> Parser i o ifP p ps pf = Parser $ \i -> case (runParser p i) of Nothing -> r…

PEGパーサーを書いてみる

PEGで文法を表現してみて、ルールのそれぞれの使い方動きにもなじみが出てきました。ここで、PEGパーサーをちょっと書いてみたいと思います。PappyやFrisbyのようにO(N)というわけに行くかどうかはわかりませんが…方針としては、Parsecのまねということで、…

PEGで四則演算を表現してみる

前回PEGで整数をパースするパターンをやってみました: NUMBER = (ZERO/NONZERO) NONZERO = (DIGIT, DIGIT0*) ZERO = 0!(DIGIT0) DIGIT = (1/2/3/4/5/6/7/8/9) DIGIT0 = (0/DIGIT) これに加減乗除を追加して四則演算をパースするPEGを書いてみます。まずは整…

PEGのボキャブラリー

前回に引き続き、解析表現文法(PEG)を見ていきたいと思います。あいまい性が無かったり、再帰降下型パーサーと相性が良いなどの特徴があるPEGなんですが、どうゆう中身になっているのでしょうか。PEGは次のような要素で構成されます。各要素の英語名の後に…

2009年

えー、あけましておめでとうございます。昨年中は色々な方にコメントをいただき、大変ありがとうございました。更新のペースが鈍ってきてはいるのですが、Haskellを通して学んでいることに対する興味は尽きる様子はありません。今年もよろしくどうぞ。