Haskell

SKI combinator calculus

*Main> termToString $ ski (E2 (E3 S (E2 K (Var 'x')) (E3 S I I)) (Var 'y')) "xyy"という感じで動作するプログラム.某 Skype チャットに SKI という単語が出てきてふと思い出したので書いてみた.例によって間違ってる可能性ありありなので適当に指摘し…

エラトステネスの篩

よく haskell コードの例として出される primes = sieve [2..] sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0] は遅いよ,という割と有名な話を昨日読んでみたんだけど,なんだか腑に落ちない部分があったのでここに書いてみる.参考にした記事は…

isTaut 2

抜けている条件があったので補ったら先程の論理式も正しく判定するようになった.やりましたね! *Main> isTaut (Not (And (And (Or (Var 'x') (Var 'y')) (Or (Not (Var 'x')) (Var 'y'))) (And (Or (Var 'x') (Not (Var 'y'))) (Or (Not (Var 'x')) (Not (V…

isTaut

*Main> isTaut (Imply (And (Var 'A') (Var 'B')) (Var 'A')) Const True *Main> isTaut (Imply (And (Var 'A') (Not (Var 'A'))) (Const False)) Const True恒等式かどうか判定するプログラム.これも『プログラミング Haskell』に載っていた例題だけどあっ…

stackvm

なにやら『プログラミング Haskell』で足し算のみ可能なスタック型 VM を実装していたのを見て,普通に関数を与えられるように改良 (?) してみた.なんとなく要領を掴めてきた…はず…! data Expr = Const Int | OP Op | OPCODE Opcode type Op = (Int, [Int] …

lifegame

『プログラミング Haskell』を半分程度読み終えたのにコードを一行も書いたことが無いというのは流石にまずいだろうと思ってライフゲームを実装してみた.というかこのライフゲーム自体もプログラムとして書いた経験が無いという事が判明したのですが,大体…