2012-04-01から1ヶ月間の記事一覧

INT命令 / メモリ書き込み / 関数の引数の取得

INT命令 アセンブラがどのタイミングで実行されるのかわからなくなったので、少し調べた。今のところは、INT命令が呼ばれたときに、レジスタの値を読み取って、命令が実行される感じみたい。なるほど。なるほど。P.39 INT命令は、(中略)関数呼び出し命令の一…

Programing in Haskell Chapter4

Programing in Haskell(http://www.amazon.co.jp/dp/0521692695) P.30-37 Defining functions halve :: [a] -> ([a],[a]) halve xs = (take mid xs, drop mid xs) where mid = (length xs) `div` 2 safe_tail1 xs | null xs = [] | otherwise = tail xs safe…

自作OS入門1-3日(1)

30日でできる! OS自作入門(http://www.amazon.co.jp/dp/4839919844) 1-3日 両方とも始まったばっかり。アセンブラ慣れません><; ブログ30日更新で、OS完成したらいいなぁ

Programing in Haskell Chapter3

Programing in Haskell(http://www.amazon.co.jp/dp/0521692695) Chapter3 -- リストと型について ['a','b','c'] -- => [Char] ('a','b','c') -- => (Char, Char, Char) [(False, 'O'), (True, '1')] -- => [(Bool, Char)] [tail, init, reverse] -- => [[a]…

Programing in Haskell Chapter2

ゴールデンウィークはプログラム書くぜー。ヒャッハー。 p.10-16 First steps http://www.amazon.co.jp/dp/0521692695 -- コンパイルエラーを直す -- 1. 変数の最初の文字は小文字 -- 2. whereの後のインデントで、解釈がかわる!!!!! n = a `div` lengt…

PHP Real World Solution

最近、ブログが更新できていないです。。というのも、会社の勉強会の本をまとめたりとかで時間が…せっかくなんでちょっと紹介。 PHP Real World Solution(http://www.amazon.co.jp/dp/0470872497) Chapter10 Testing Database Interaction p.188-p.203 あのP…

Programing in Haskell Chapter1

Programing in Haskell Chapter1 p.1~p.9 http://www.amazon.co.jp/dp/0521692695Excesises -- doubleの別の書き方 double x = x + x double' x = x * 2 -- リストの掛け算 product' [] = 1 product' (x:xs) = x * product xs -- でかい順に並ぶクイックソー…

プログラミングの基礎 終わり

今さっき、プログラミングの基礎を読み終わりました。最後のヒープを使ったチューニングは、影響範囲と意味のわからないコンパイルエラーに泣かされつつもなんとか完成をさせることができました。 サボったところが仇に 駅とつながっていた場合に最短距離を…

プログラミングの基礎 第23章

うーむ。ヒープソートを少し手直ししたり let swap vector a b = let (index_a, key_a, value_a) = vector.(!a) in let (index_b, key_b, value_b) = vector.(!b) in begin vector.(!a) <- (a, key_b, value_b); vector.(!b) <- (b, key_a, value_a); end le…

プログラミングの基礎 第23章

やっとヒープソートができた!ラストスパート! type index_t = int ref (* ヒープの添字の型 *) (* 最小値を求める値が'a型で、 * その他の情報が'b型であるヒープの型 *) type ('a, 'b) t = int ref * (index_t * 'a * 'b) array (* index xの項目を受け取っ…

プログラミングの基礎 第23章

set関数で値が変わんないんだよなー。どうして?配列に入ってるはずなんだけど… type index_t = int ref (* ヒープの添字の型 *) (* 最小値を求める値が'a型で、 * その他の情報が'b型であるヒープの型 *) type ('a, 'b) t = int ref * (index_t * 'a * 'b) …

プログラミングの基礎 第23章

ヒープがむずかしい><;また明日!悔しい! let swap vector a b = let tmp = vector.(a) in (vector.(a) <- vector.(b); vector.(b) <- tmp;) let rec blance heap index = match heap with (size, index, vector) -> let (index_a, key_a, value_a) = ve…

プログラミングの基礎 第22章

破壊的代入のせいなのか、わからないけど、美しくない… let fib_array array = let rec rec_fib index length array = if index + 1 = length then array else if index = 1 then ( array.(index) <- 1; array.(index+1) <- 1; rec_fib (index + 1) length a…

今日で10000view超えた

今日、遊んじゃったのもあるけど、ブログ書くネタないや… 10000view超えました!ほとんど、自分とbotだった。なんつってーorz

プログラミングの基礎 21章

今回は、スタンドアローンプログラムを作るのと、集合操作の実装です。いやぁ、美しい気がします。レッドブラックツリーも手続きが他言語に比べると美しい。パターンマッチとリスト処理っていいもんですね。 (* 要素の型が、'aの集合体 *) type 'a t = | Emp…

プログラミングの基礎 第20章

レッドブラックツリーができた!駅の実験データで、試してみたらちゃんと平衡してるっぽいwこんなシンプルな記述で、できるなんてすごいなぁ。昨日できなかった理由は、親のNodeの色を黒に限定していたからで、本当は親の色は関係ないのでした。孫と子が赤な…

プログラミングの基礎 第20章

今日は、レッドブラックツリーを実装すべく始めましたが、結局終わらず、balanceする関数はできたはずですが、insertするときにどのタイミングで黒が入ってくるのかっていう…できた!と思って、駅間のリストで試してみたら、赤の木構造ができましたとさ…orz…

プログラミングの基礎 第19章/第20章

まずは、2文検索木で駅間を分ける。どうしたかというとタプルを比較できるので、駅と駅をつないだ情報をタプルにしてしまって、それをキーに突っ込んでます。ちなみにmakeKeyは、発着駅と終着駅のダブルカウントをさせないためにやっています。 let makeKey …

プログラミングの基礎 第19章

途中まではふむふむって感じで読み進んだんだけど、最後の問題で、今まで木構造を使ってただけだったのが2分検索木を使う事になっててあれ?ちょっと明日考え直してみます。でも抽象データ型楽しみ! Javaで言うところのインターフェースかな? (* 2分検索木…

プログラミングの基礎 第18章

例外機構について、例外で帰ってくる型も合わせる必要があるので、難しく感じるところもありましたが、この本に従って書くと自ずと堅いプログラムになるので、結構便利だなと思った。ただ、投げっぱなしになると、どの言語でもそうだけどダメですねw電車の演…

プログラミングの基礎 第17章

今日で17章が終わりました。今日も案の定、朝起きると喉がガラガラでめちゃくちゃ痛かった><;昨日に引き続いて17章。最近進むスピードに問題…。それは、さておき。今日のお話。 今日は、 駅情報を使って、駅とその駅に接続されている情報を作り直すお話 …

プログラミングの基礎 問題17

風邪が治らん。早くなおってほしいです><; (* 木を受け取って、すべての値に対してfを行う関数*) (* tree_map : (int -> int) -> tree_t *) let rec tree_map f tree = match tree with | Empty -> Empty | Leaf (n) -> Leaf (f n) | Node (t1, n, t2) ->…

プログラミングの基礎 saitan_wo_bunriのデバッグ

昨日に引き続き、関数のデバッグ。なんかおかしいなと思って、そもそもglobal_ekimei_listをしらべることに。 飯田橋の駅の個数を調べる (*飯田橋を取り出す*) let iidabashi = List.fold_right (fun x data -> if x.namae = "飯田橋" then x::data else dat…

プログラミングの基礎 saitan_wo_bunriの高速化

ちょっと本の話題とは、脇道にそれました。saitan_wo_bunri関数を次のように定義していて et saitan_wo_bunri xs = match xs with | [] -> ([], []) | first::rest -> let min = List.fold_right (fun k data -> if k.saitan_kyori < data.saitan_kyori then…

プログラミングの基礎 第17章

今日は、17章の前半をやりました。関数型言語で、リスト以外のデータ構造を作ったのは初めてです!勉強になりました。 多相型+データ構造は便利。気になったのは、次のように定義しておくと、Leafを汚染してしまって、エラーがでちゃう。 (* 多層の木を表す…

プログラミングの基礎 ついにdijkstra_mainが解けた

3/30(金)のプログラムが全然ダメダメで、どうすれば、うまく行くのかを考えて4/1(日)更新ができませんでしたが、ついにdijstra_mainが解けました。これまで、saitan_wo_bunriの中身を書き換えたりしていくなかで、match xx withまわりで、マッチングの新しい…