2004-07-01から1ヶ月間の記事一覧

Parser Combinatorというもの(その2)

このページにはいわゆる解説記事を載せるつもりは無かったのだが、 (たいていは他にもっとうまい説明のページがあるだろうから…) どうやらこれがそうなってしまいそうである。 もっとまともな解説は http://sky.zero.ad.jp/~zaa54437/programming/clean/Clea…

Yaccと正規表現とParser Combinatorと

(序)突然であるが、Haskellは文字列処理が強力だと思う。 それも最強レベルに。 他のいわゆる文字列処理が得意であるとされる言語のように 正規表現による置換が可能であるとか、文字列がオブジェクトで 有用なメソッドがたくさん使えるとかそういった 小手…

最強のパーザー、Parser Combinator

実は昨日の話題はこれから書こうとする話とつながりがあるのだ。 (直接的には無いけど)

続・遅延IO

少し前に遅延IOの話を書いたと思う。 そのときはgetContentsなどの遅延する関数は 実はモナドの法則(bind演算の結合法則)に従っておらず、 ちょっぴりunsafeで、でも入力を根こそぎ持っていくような ケースだと大して問題にならないどころか有用にもなりえる…

今気づいたけど…

これ、PDFになってるのね… http://www.ipsj.or.jp/07editj/promenade/index.html こんなの去年は無かったぞ。

プログラム・プロムナード(7月号)

久々に情報学図書館に行ってきたので読んできた。 テスト勉強に行ったついでなので、キーワード拾ったぐらいなのだが。 今月の問題は m本のコードの長さ(実数)が与えられて、 それらのコードから同じ長さをn本切り取るとき、 切り取れるコードの最長値はいく…

今月の情報処理

ネタが無い… いや、ネタが無いのではなくて文章を書くのが遅いというべきか。 まだ一つ書きたいHaskellネタがあったんだけど。

追記

行ごとに処理するだけならこんなのでも良かった。 import Data.List main = interact $ \d -> let (l,w,c) = calc d in show l ++ " " ++ show w ++ " " ++ show c where calc = foldl' sadd (0,0,0) . map wccc . lines wccc str = (length $ words str,len…

遅延評価の落とし穴

http://www.bagley.org/~doug/shootout/ このページ、言語の比較ページなのであるが、 Haskellのスコアが不当に低いように感じた。 全体のスコアは未実装のテストが有ると大幅に低下してしまうようなのだが、 LOC(コードの長さ)でもあまり芳しくないのはどう…

IPA:未踏ユース

公募結果が出ていた。 http://www.ipa.go.jp/jinzai/esp/2004youth/koubokekka.html かく言う私も実は応募していたりしたのだが、 見事にはずれたっぽい。 Declarative game library とかいうテーマで出したのだが、 PMの方はその意義がオワカリになられなか…

SDL AUDIO にしてやられる

HSDL(http://fxp.infoseek.ne.jp/haskell/HSDL/)だが、音楽関係、 昨日書いたメモリの問題で大き目のWAVを鳴らすことが不可能だったり まともにミックスするのが大変だったり、 フォーマット変換が出来なかったりいろいろ作りかけだったので その辺の実装を…

落胆

最近内容が薄いなぁ。 でも、一応毎日書いとくか。

メモリ食い

リストはHaskellのデータの中でもっとも基本的なものだが、 とてもたくさんメモリを食うようである。 20MBのファイルをstrictに読み込んだら256MBのヒープ制限を越えてしまった。 それで、2MBのファイルを読み込んだらメモリ使用量が50MBと出た。 …1バイトあ…

Brainfuck

今更ながらにBrainfuckを実装してみた。 いつもどおりHaskellで… http://www.muppetlabs.com/~breadbox/bf/言語仕様的にどっちかと言うとコンパイラのほうが簡単である。 main = interact $ (header++).(++footer).(>>= cvt).(filter (`elem` ">cvt '>' = "+…

続・OpenGL

現在の安定リリース版GHC(6.2.1)にはOpenGLライブラリから テクスチャサポートがはずされているらしい。 http://www.haskell.org/pipermail/hopengl/2004-May/000489.html これは参った。 テクスチャが張れないと2DのゲームにOpenGL使えへんやん? メインブラ…

HaskellでOpenGL

昨日までOpenGLのおの字も知らなかったのだが、 気が向いたのでやってみることにした。 なんというか、思いのほか簡単である。 もっと初期化とかめんどくさいと思っていた。とりあえず、初期化のコード main = do True OpenGL" "" sur OPENGL] loop sdlQuit …

国内予選の問題の解答

http://ccserv.adm.ehime-u.ac.jp/ICPC/jp/ なんと出力例が公開されているではないか。 問題Eと問題Fについては正解していなかったので、 公開している解答が合ってるかわからんかったんだよなぁ。 ということで、チェックしてみたところ、 サイトにアップし…

Haskell/SDL版テトリス

wsTetlisをSDL向けに移植した。 http://fxp.hp.infoseek.co.jp/haskell/HSDL/ サンプルに追加。 移植自体は非常に潤滑に進行したので 今回もデバッグ作業をしなくて済んだ。

遅延IO

Haskellを勉強したてのころ、interact String) -> IO () という型を持つ関数">*1という関数にひどくおどろかされたものである。 たとえば、 main = interact $ map toUpper などと書けば入力を大文字に変換して出力するプログラムとなる。 こう書くといたっ…

getContentsの謎 〜遅延IOは死のかほり〜

はてなダイアリー、Haskellのページ制覇達成。 今回は少し趣を変えて。

malloc new

Foreign.Marshal.Alloc.mallocとか、GCしてくれないのね… メモリだだ漏れ。

FFI (その6)

ついにこの連載(?)も6回目になった。 6回目ということは6日目ということで、 もうかれこれ一週間もFFI漬けだということなのだが。 昨日の終わりからどばーっとコード書いて、 どばーっとMakefileの勉強して、どばーっとHaddockで ドキュメント作ってwxHaskel…

FFI (その5)

Audio周りを実装。 今回も考えるところが多くて大変。 とりあえずミキサーをどうするかということなのだが、 やっぱりこれもHaskell側で書くことにした。 コールバックはもともとの仕様と同じ Ptr() -> Ptr Word8 -> Int -> IO () な関数で受け取り、Haskell…

FFI (その4)

こっちも作り始めて3日目、そろそろ形になりつつある。 今日はEvent周りを作ったのであと大きな課題はAudioぐらいか。 Audioもパフォーマンスを考えなかったらミックスルーチンを 適当にHaskellで書くだけなのだが… それにしてもEvent周りは大変だった。 何…

寝ても覚めても

テスト前でも関係なし、関係なし…

uva online contest

今日の02:00から06:00まで http://acm.uva.es/ で オンラインコンテストがあったので、とりあえず参加した。 というか、参加しようと思っていたのだが、すっかり忘れていて 気づいたのは5時。しかしまぁ、一時間だけ頑張った。 簡単そうな問題を適当に。 問…

FFI (その3)

前回までで大体FFIの方法がわかったので、 とりあえずVideoのラッパを作成した。 本当にうすうすなラッパなんだけど… しかし、ポインタのやり取りが多いのでどうすればいいのか結構悩んだ。 結局Surface以外はStorableなデータとしてあらわすことにした。 Fo…

鴨川

自転車撤去がリアルタイムで進行中。 どうしたものか。

コンパイラ

C

結局レポートは結構適当な出来で提出。 Haskellのほうがおもろいんだもん…

FFI (その2)

前回の続き。 今日はコードがひときわ多い。 CからHaskellは呼び出せたので、 今度はHaskellからCコードを呼び出してみようと思う。 …しっかし、マニュアルが全然読めない。英語なので… どうでもいいがForeignモジュールはHaskellの暗黒方面っぽい。 メモリ…