Haskell

バグとれた

うーん、疲れた。眠い。

できた

適当なままずるずると書き続けてコピーをキャンセルできるようにした。wxHaskell をいろいろ試しながらやってるのでどっか変なコードになってるかも。

wxHaskell のサンプル

プログレスバーを出す感じにしてみた。またしても投げやり。けど wxHaskell の資料が少ないので、公開しておけば少しはほかの人の役に立つかもしれない。プログレスバーはダイアログなのでちょっと扱いづらい。

Button は Window なのか

知らなかった…。 ボタンを disable にする関数が見つからないわけだ。windowDisable ってやつを使えばいいのかー。

ファイルコピー

突然だけど、ちゃんと活動していることを示す(誰に?)ためにコードを貼付けておく。 ディレクトリを指定するとコピーするというだけの投げやりプログラム。ソースもいろいろ投げやり。動けばなんでもいーや的な。1週間以内にはこれが GUI っぽくなる予定です…

Haddock と Template Haskell

Template Haskell を使ったソースに対して Haddock でドキュメントを生成しようとすると、文法エラーで落ちてしまう。困ったなー。

研究してました

今日は主にプログラミングばかりやっておりました。 Haskell でいうところの where 節内に書かれた関数を外で使えるようにするために、引数を補ってやりましょうみたいな話。今までは外側の関数の引数を全部内側の引数に加えるという力技でなんとかしてたん…

wxHaskell (Debian編)

wxWidgets 2.6.4 で、かつ GHC 6.6.1 だととりあえずインストールはできる。が、バイナリを実行しようとすると共有ライブラリが見つからないとか言われて落ちる。 LD_LIBRARY_PATH を設定したらとりあえず起動したが、なぜか文字の表示が変になる。全く見え…

wxHaskell (Windows編)

Windows の場合は、最新の GHC (たしか 6.6.1) と、 wxWidgets 2.6.4 (たぶん)と、それに対応する wxHaskell のバイナリ(公式ページじゃなくてそこらへんのアーカイブから探してくる)で普通に動いた。なんて楽なんだ。あまりのあっけなさに腰が抜けそうだっ…

Haddock とか Hackage とか

Haskell でライブラリっぽいものを書く気がするので、こういうものを意識している。 で、 Haddock を適当に使ってみたら日本語が化けたのに強いショックを受けました。…これだから欧米人はっ!(偏見)

解決しました

例の wxHaskell がらみのことは無事に解決されました。 id:syd_syd さんに全力で感謝したいと思います。 …しかし…仙台?遠くね?

wxHaskell は鬼門

うぐぅぅ。 wxHaskell を使ったプログラムが落ちる…。原因が全くわからんわー。

Linux での wxHaskell

うまくいかない…。 Mac で wxHaskell を使っていたら、なんだかよくわからないバグが発生したので、 Debian で試してみようと思ったのがいかんかった。完全にはまって今まさに半日を無駄にしようとしています。 んー、どうしてもリンクに失敗します。この問…

Template Haskell は脳内メモリを食い尽くす

タイトルの通り。ややくじけそうである。 昨日から、自分で定義したデータ型を使って書いた構文を、Template Haskell でコンパイル時に Haskell ソースに変換するというようなメタプログラミングをしている。とはいえ、今日は一日遊んできたからほとんど何も…

GHC の抽象構文木

わけあって GHC の抽象構文木をちょびっとだけ触らないといけないのだけど、構造がよくわからない。どっかにドキュメントがあるといいなぁ。大雑把に探してみた感じでは見つからなかったんだけど。

不動点探し

SICP を飛ばし飛ばし読んでいる。これは、不動点を求める関数を使って平方根を求める、というもの。以下は適当メモ。関数 f の不動点とは、 x = f x となるような x のこと。ここで y^2 = x という式を考えると、例えば sqrt 2 は、 y^2 = 2 となるような y …

Strong Bisimulation Checker

今までにみた関係を覚えておくことで、くるくる回ってもいいようにしてみた。ソースがいよいよ汚い。 import Control.Monad.State import Control.Monad (liftM) trans = [("p0","a","p1"),("p0","a","p2"),("p1","b","p0"),("p1","a","p2") ,("p2","b","p0"…

Strong Simulation Checker

すごい適当。明日には読めないソースであることよ(詠嘆)。 trans = [("p0","a","p1"),("p1","b","p2"),("p1","c","p3") ,("q0","a","q1"),("q0","a","q1'"),("q1","b","q2"),("q1'","c","q3")] simulates :: String -> String -> Bool simulates p q = let t…

Probability Monad (あきらめ)

今日はまじめに論文を読んでて疲れたので、気分転換に昔どっかでみた"確率モナド"みたいなものを実装してみようと思った。けどめんどくさくなったのでモナドにするのはあきらめて、 select という関数を作って代用してみた。まぁ、それなりにそれっぽく書け…

Concurrent Haskell で遊ぶ

勉強してたら知恵熱がでそうになったので休憩。普通のクイックソートより遅くなる。(当たり前) import Control.Concurrent import System.Random (randomRs, mkStdGen) main = do r <- newEmptyMVar sort r $ list 1000 takeMVar r >>= print list x = take …

止められる fib その2

killThread という関数を使えば、別に Maybe とかで頑張らなくてもいいね。 main = do putStrLn "Enter number: " n <- getLine id <- forkIO $ fib (read n) putStrLn "Press any key to stop calculation." getChar killThread id putStrLn "Now thread st…

止められる fib

これまた適当に書きました。sfib が汚い。フィボナッチ数を裏で計算している途中で何かキーを入力すると、計算が止まります。(しばらく待ってても結果が出力されないことで確認できます)でも、計算を止めないとなぜかデッドロックする模様。はて。 import Co…

哲学者

無限ループなのになぜか終了してしまうという問題は、id:mzp に、最後の forkOS を消せばいいとアドバイスされて解決されました。サンクス。 うむ、たしかに親は子の終了を待たないってどっかに書いてあったな。なんで気がつかなかったんだろう。 あと Concu…

箸を奪い合う哲学者達

Concurrent Haskell で適当に書いてみる。そしたらなぜかデッドロックしないんですけど。うむぅ。 というか、コンパイルして実行すると、なんとしばらくすると終了してしまうのです。無限ループしてるはずなんだけどなぁ…。(http://d.hatena.ne.jp/zyxwv/200…

Maybe Monad

Haskell は遅延評価だから、Maybe の意味があるわけか…。 手続き型言語の例外とまったく同じように扱えるわけだね。

モナド則

http://d.hatena.ne.jp/zyxwv/20070823 のモナド則から、Haskell でよく使われるモナド則を導く予定。これって Coq が使えるんじゃないだろうか。しっかり紙でやってしまったけども。 とりあえず簡単なやつから。導出できたら随時追記。 m * λa. unit a => m…

Monad Laws

とりあえずメモだけ…。 map :: (a -> b) -> (M a -> M b) map fm = m * λa.unit (f a) join :: M (M a) -> M a join z = z * λm.m map id = id map (f . g) = map f . map g map f . unit = unit . f map f . join = join . map (map f) join . unit = id jo…

乱数

Haskell での乱数の使い方の確認のために。でもこれだと種が同じなので毎回答えが一緒。普通の乱数が使いたければ System.Random.getStdRandom とかを使えばいいが、もちろん IO がつく。 import System.Random (randomRs, mkStdGen) import System (getArgs…

型の不動点

なんじゃそれ…。

Y combinator

メモメモ。 y f = f (y f) fact f x = if x==0 then 1 else x * f (x-1) Main> y fact 10 3628800 Main> Scheme で書かれた Y Combinator の解説を読んだけど、僕にはちょっとわからんかった。遅延評価のある Haskell だとすごく簡単で、わかりやすい(気がす…