2010-09-01から1ヶ月間の記事一覧

qtHaskellのインストール

buildスクリプトを使ったインストールだとcabal --globalでインストールしようとする。 従ってHOpenGLとParallelが同じ条件でインストールされていないとうまくいかない。 ユーザーローカルにインストールしようとすると面倒くさそうなので、システムにイン…

Monad Laws

日本語訳何て言うの。 何やらMonadを扱う関数は下記の3つのルールを守れという事だそうな。 return a >>= f が f a と同義。 f >>= return が f と同義。 f >>= (\x -> g x >>= h) が (f >>= g) >>= h と同義。合成の優先順位が変わっても問題ないように、と…

do notation

基本的には、(>>)::(Monad m) => m a -> m b -> m bの連鎖のシンタックスシュガー。 ※以下に現れるfsは処理の集まりを表す。 do{f}→f do{f; fs}→f>>do{fs} ただし以下の特殊な動作になる場合が存在する。 do{let decls; fs}→let decls in do{fs} do{x >= g

HaskellでXorShift

整数型の無限リストという形で疑似乱数が欲しかったのでXorShiftで作ってみました。 これを作る過程でData.WordとBitsを使いましたが、使いやすくてすごく気に入った。 ちなみにC/C++の^記号がXORを意味するのを忘れていて無駄に時間を食ったのは内緒。 impo…

あるリストの各要素をある処理を経て他のリストへ入れたい時。

例えば『空白区切りで並んだ数値文字列の合計を算出して、それをリストに格納したい』時。 以下のような処理を行う。 -- 仮に結果を単精度浮動小数点数としておく。 plus :: String -> [Float] plus = foldl f [] . words -- (1) where f (x:xs) d = (x + (r…

ガードで分岐

ガードで分岐させてもそれぞれが別々の関数になるわけではない。 あくまでcase式のシンタックスシュガーである事を忘れない。 --追記 パターンマッチも同じ扱いだった。

たぶん慣れるしかないんだろうけども

「Yet Another Haskell Tutorial」がMonadの章まで来たので、ここで一旦Haskellでコードを書く訓練をしている。 細かい機能は便利だと思うんだが、アルゴル系言語みたいに思いついたまま書くことが出来ないことが痛い。 これを何かクリアする方法は無いもん…