Life Goes On

まあまあだけど楽しんでる方です

2008-10-01から1ヶ月間の記事一覧

チャーチ数であそぼ

チャーチ数の演算をコンビネータで表すと (^) はλabcd.bacd = λab.ba = CI(引数の順序を気にしないなら I ) (*) はλabcd.a(bc)d = λabc.a(bc) = B (+) はλabcd.ac(bcd) = λabcd.B(ac)(bc)d = λabc.(BBac)(bc) = λabc.S(BBa)bc = λa.BS(BB)a = BS(BB) (+) …

今日の教訓

よくあるクイックソートのプログラムを List モジュールの sort 関数(マージソート)と比べてみました。 import Data.Ratio quickSort :: Ord a => [a] -> [a] quickSort [] = [] quickSort (l:ls) = quickSort (filter (< l) ls) ++ [l] ++ quickSort (fil…

The Implementation of Functional Programming Language

会社に落ちてたので、有難く頂戴いたしました。 ラムダ計算とかパターンマッチとか多相型チェックとか SK コンビネータとか遅延評価とか、どっかで見たような話題が並んでるなと思ったら、作者の Simon Peyton Jones って Haskell 界の大御所でした。 うわぁ…

グッドスタイン数列

最近、計算可能性とか不完全性定理とかについて勉強しています。その中でグッドスタイン数列というのが出てきて、これを Haskell で書いてみようと思いました。 遺伝的記述をリストで表現しようとしていて、値と遺伝的記述を変換する関数を書きたいのですが…

関数適用と関数合成

以前に出られなかった勉強会の資料を見てたら、flip id は flip ($) と同じと書いてありました。たしかに id :: a -> a で ($) :: (a -> b) -> (a -> b) だから、id の a を関数 a -> b と見れば、同じだ。 ということは main = print $ (+3) $ (*2) $ 1 こ…

あなごるでv

仕事が落ち着いたので、前から気になっていたあなごるのvの code を読んでみました。 基本は↓の関数を作ること。 f x = if succ x == w then out x else f (succ x) 名前はつけられないので↓みたいにして、引数 x に関数を渡す。 f x y = if succ y == w the…

MS Accessの最適化のナゾ

SQL

以前、ちょっと遅くて困っていたSQLがありました。 元はこれ。 -- Ver. 1 select id, max(time) from ( select id, time, (select count(*) from log where id = t1.id and time < t1.time) as count, (select count(*) from log where id = t1.id group by …