2007-08-01から1ヶ月間の記事一覧

なんかおかしいな

Pi

なぜだめなんだろうか。眠くてもうだめ。 main = piStart False Nothing mainPr mainPr :: Maybe (I (), NewP) -> PiMonad () mainPr _ = do s <- new fork $ fib 10 s s' <- recv s cout

今日やったこと

なんか時間のかかる処理がしたかったので、フィボナッチ数の計算をしようと思った。(意味不明) そんで π 計算でフィボナッチ数を計算するプログラムを書かなくちゃなーと思って、ややめんどくなってすぐやめる。(おい) 前からちらちら見ていた "Monad for Fu…

止められる 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…

GUI

研究のために、GUI プログラミングの勉強をしている。これまで GUI プログラミングをした経験が全くないので、作法とかがよくわからない反面、新鮮で面白い。

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…

勉強

プログラムの資料を読んだりしてても、あんまりさぼってる気にならないのはとてもいいことだ。院試前はそうはいかなかったから。 これからは研究しなきゃーみたいなプレッシャーと闘うことになるのかな〜。

独習 Scheme 3週間

独習 Scheme 3週間という資料を印刷してあるのを見つけ、ぱらぱらと見てみる。前半はまぁいいとして、後半からは、 マクロ オブジェクト指向プログラミング 継続(コルーチンとか) 非決定計算 エンジン みたいな話がでてきて結構濃い。もうちょっと前にこれを…

TypeError

前に書いたスクリプトが、一部のサイトでは TypeError と出て動かないことが判明。 エラーログよると、"aaa-greasemonkey-functions.user.js" の中で怒られている感じ。謎…。

The Coq Proof Assistant A Tutorial

Coq

読んでた。結構おもしろい。けど、"Paradoxes of classical predicate calculus" と題されたとこが謎。英語力が足りないのか論理学の知識が足りないのか。 あと、forall とか exists とかの扱いがいまいちわかってない気がするな。坂部先生の資料で自然演繹…

型の不動点

なんじゃそれ…。

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 だとすごく簡単で、わかりやすい(気がす…

やっぱり本がいいなー

コピーあるいは印刷した資料で勉強してるとよく思う。なんでかっていうと、書き込んで勉強した資料がどこにいったかわからんくなるから。今まで印刷あるいはコピーした資料はバインダに綴じて全部とってあるけど、なにがどこにあるかさっぱりわからん。ちょ…

Google 翻訳

Google 翻訳の結果もポップアップできるようにしてみた。 あんまり使ったことなかったけど、 Google 翻訳(英→日)っていまいちの精度だね。無料のものに文句をつけるのもどうかと思いますが。

イベント

最近は JavaScript ばっかりな気がする。今日学んだことは、イベントオブジェクト(?)のプロパティは値が代入されていないことがあること。 例えば onmouse っていうイベントだと、マウスの位置を表す pageX っていうプロパティはもちろんちゃんと代入される…

Ctrl と Command

あぁー。Mac だと、Control ってのは Command のことなのか。それはいかんわー。 Control が押されているかを取得しようとしてて、どうもうまくいかんなーと思ってたらこんなオチが。

XMLHttpRequest

XMLHttpRequest は、そういえばローカルなサーバ以外とは通信できないんだったね…。そりゃ Security Violation とかでまくるよ。どんだけ時間無駄にしたんだ…。

GADT

この前、"必ず引数を2倍した値を返す関数"みたいなものを型で表せないかなーとか考えてた。 double :: Num a => a -> Nibai a みたいな。適当だけど。 型の上で足し算かけ算はできた(http://d.hatena.ne.jp/zyxwv/20070730)ので、それを利用すればいいのかな…

辞書

stories -> story みたいな変換をやるようにした。ソースがすっごい汚い(というか適当すぎ)のでなんとかしたいところ。 あと、データ(オブジェクト?)の型がよくわからん。たくさんありすぎじゃない?

Djinn

最近は内容のないエントリばっかな気がするけど。Djinn というやつがおもしろそうな感じ(なにを今更)。これも試験が終わったら少し触ってみることにしよう。 というか、こいつの仕組みが知りたい。TAPL を読んだらわかるだろうか。

クロージャ

うーん、毎回混乱するなぁ。どうやって実装するもんなのかな…。

LL魂

それはそうと今日は LL 魂だったそうです。月曜日の勉強会ではそのレポートが聞けるはずなので楽しみです。勉強会のメンバから3人も参加してるってのはなかなかすごいことだと思う。(しかも発表者が2人) でも、今まで愛用してきたるるぽがつぶれてしまったの…

改良してやった!

英語の勉強しなきゃ〜 -> NewYorkTimes 読むか〜 -> ポップアップしたとこのリンクが相対リンクで記述されてるせいでいろいろ不便〜 -> 相対リンクを補って、発音記号とかwavファイルとかがきちんと参照できるようにした。勉強しろよ俺!

OCaml サブセット インタプリタ

とりあえず適当に動くようになった。Scheme と違うのはカリー化ができるところと、中置演算子とか結合の優先度とかがあること。

そこらへんの大学生の少し上を行くために

夏休みはみんなで CPU を作ろう!とか言っても誰も乗ってきそうにない。某T大の CPU 実験てのがおもしろそうすぎてうらやましい。とりあえず FPGA がないとなんも始まらんね。そこらへんの研究室から借りてこられないかなー。