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

コインを減らす払い方

コインを減らす払い方 (どう書く?org) いま、あなたの財布の中にはコインがたくさん入っています。これを少しでも減らしたいと思います。支払うべき金額と持っているコインの種類と数を与えられたときに、どのコインを何枚出せばおつりを受け取った後のコイ…

ハノイの塔

OCaml で手続き的に書いてみる. ハノイの塔hanoi' が実質計算します.型合わせていったらできたけどぐちゃぐちゃになりました. あまり説明する気も,かといって綺麗に書き直す気もおきません.解き方はセオリーどうり 1. n-1個を a から c を使って b に移…

逆ポーランド計算機

S式ストリームパーサ版を作ろうと思って書いてたら id:mzp が書いてしまったので方向転換. 逆ポーランド計算機 #load "camlp4o.cma" type token = Op of string | Num of int let lexer = Genlex.make_lexer ["+"; "-"; "*"; "/"]let rec parse = parser | […

完全数

煮詰まったときの頭の体操. divisors :: Int -> [Int] divisors n = divisor' n 1 where divisor' n m | n >= m * 2 && n `mod` m == 0 = m : divisor' n (m + 1) | n >= m * 2 && n `mod` m /= 0 = divisor' n (m + 1) | n < m * 2 = [] isPerfectNumber :…

Emacs 22.1

今更ですが Emacs22.1 がリリースされました. このバージョンから Mac OS X 正式対応ということでビルドしてみました.とにかく 本家から最新版(22.1系)ダウンロードします.展開してから $ ./configure --enable-carbon-app $ make bootstrap $ sudo make …

prosper.sty

prosper は tex でスライドを作るためのスタイルです.Power Point は有料だし,数式打つのが面倒だし,そもそも Power Point が入っているマシンでないとプレゼンができない. Distiller とかで PDF にする方法もあるけどそんなの持ってないし. あと頻繁に…

超簡単S式計算機

ここの問題 よりまた一問解いてみる.四則演算のみが使えるS式を解釈して結果を出力するプログラムを書け。入力例:(+ 1 2) => 3 (* (+ 2 3) (- 5 2)) => 15ということで ocamlyacc で書いてみる.(ちょっと大掛かりすぎか?) 入力例は2引数になってるけど,一…

しりとり

なんか煮詰まったので息抜きに ここの問題 をひとつ解いてみる.しりとり: 1. 文字列のリストの要素全てを使ってしりとりが完結するかを判定 2. 最長のしりとりを出力とりあえずいけるところまでしりとりさせる. OCaml でやろうかと思ったけどバックトラッ…

常日頃から時間軸が違うような気がしていた

OCaml-Nagoyaな友達の id:yoshihiro503 さんがはてダで 定理証明系Coqを使った証明をゴリゴリ書き始めたもよう。 未来日記で。

Main> comb 3 [1..5]

[[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5], [2,4,5],[3,4,5]]

関数型指数

Functioal Programming IAT "関数型指数 (潜在的な関数型プログラミングの嗜好度) をはかる" だそうです.結果 あなたの関数型指数は 0.179482541761944 です。正が関数型、負が手続き型です。ということで関数型だそうです. これがどれくらいの大きさなの…

組み合わせ

前回の改良バージョンを眺めていると組み合わせも簡単に作れることに気付く. takeOne のときに 前半を捨ててしまえばよさそうだ. takeOne' :: [a] -> [(a, [a])] takeOne' [] = [] takeOne' (x:xs) = (x, xs) : takeOne' xscomb :: Int -> [a] -> a comb _…

Main> perm 2 [1,2,3]

[[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]なるほど簡単だ.追記: == を使ってるから Eq に属してないといけないんだよね,と話すとI井君がサクっと改良してくれた. 要するに n 番目の要素と,それを取り除いたリストをタプルで持っておけばいいわけです. re…

順列

順列をリストモナドでどう書くのだろう,と,ふと思いたち書いてみた. remove _ [] = [] remove x (y:ys) = if x == y then ys else y : (remove x ys)perm _ [] = [[]] perm 1 l = do x <- l return [x] perm n l = do x <- l xs <- perm (n - 1) (remove …

DWR

Ajax 初挑戦.DWRはAjaxアプリを作りたいJava開発者にお勧め の通りに DWR を試す. 上記サイトに詳しいことが書いてあるのでポイントだけ.web.xmlorg.directwebremoting.servlet.DwrServlet を指定して servlet 要素を設定する.dwr.xmlWEB-INF に置く. c…

Mac OS X のスクリーンキャプチャでゴミを作らない

Cmd-Shift-4 のキャプチャはデスクトップにゴミが増えて面倒.ということでクリップボードに保存する方法.ターミナルで$ screencapture -i -c もしくは cmd-ctrl-shift-4