2011-05-01から1ヶ月間の記事一覧

プログラミング Haskell 第13章 プログラムの論証 その1

プログラミングHaskell作者: Graham Hutton,山本和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行本(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見るついに最終章「プログラムの論証」に入ります。この章は長…

プログラミング Haskell 第12章 遅延評価 練習問題

今日は少しイレギュラーですが休日に自宅で読みました。12章の最後の練習問題です。 6. data Tree a = Leaf | Node (Tree a ) a (Tree a) repeatTree :: a -> Tree a repeatTree x = Node (repeatTree x) x (repeatTree) takeTree :: Int -> Tree a -> Tree …

プログラミング Haskell 第12章 遅延評価 練習問題

12章は例があまりなかったので記述形式の練習問題が多いです。 1. 1 + (2*3) => 2*3 最内 (1+2)*(2+3) => 1+2 最内、2+3 どちらでもない fst (1+2, 2+3) => fst (l1+2, 2+3) 最外、1+2 最内、2+3 どちらでもない (λx -> 1 + x) (2*3) => (λx -> 1 + x) (2*3)…

プログラミング Haskell 第12章 遅延評価 その2

遅延評価の章の後半です。 12.6 部品プログラミングは無限リストと take などを組み合わせて、データを制御を切り離して記述できる遅延評価の強みについて 正格適用 - $! 演算子をつかうと式を正格に評価する。つまり遅延評価しないで先に評価してからその値…

プログラミング Haskell 第12章 遅延評価 その1

プログラミングHaskell作者: Graham Hutton,山本和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行本(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見る今日から第12章に入ります。遅延評価という Haskell の特…

プログラミング Haskell 第11章 切符番号遊び その4

今日は 11.5 「代数的な性質をいかす」ということで、交換法則(x+y=y+x)と単位元(x*1=x, x/1=x と結果が変わらない)の性質を考慮して同一の式と見做せるものを除外することでより効率的な探索をするようにしました。といっても変更するのは式を受けつけるか…

プログラミング Haskell 第11章 切符番号遊び その3

今日は 11.4 「生成と評価の方法を変える」ということで生成する式の枝刈りを含める部分の写経しました。今度の combine' は結果が自然数にならない式を除外するので高速になりました。今回もリスト内包表記をばりばり使ってます。 type Result = (Expr, Int…

プログラミング Haskell 第11章 切符番号遊び その2

今日は総当たり法の写経をしました。リスト内包表記が頻繁に使われるということ以外そんなに目新しいこともないですね。再帰を使って書くと楽だと感じられるようになってきました。しかし時間はとてもかかります。ただ Expr が Show を実装してないのでその…

プログラミング Haskell 第11章 切符番号遊び その1

プログラミングHaskell作者: Graham Hutton,山本和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行本(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見る今日から第11章に入ります。10章に時間がかかりすぎたので…

プログラミング Haskell 第10章 型とクラスの定義 その5

今日は練習問題の 3, 4 です。 3. data Tree = Leaf Int | Node Tree Tree deriving Show leafs :: Tree -> Int leafs (Leaf _) = 1 leafs (Node l r) = (leafs l) + (leafs r) balanced :: Tree -> Bool balanced (Leaf _) = True balanced (Node r l) = ab…

プログラミング Haskell 第10章 型とクラスの定義 その4

今日は Monad クラスの説明を読みました。 Monad もただの型クラス(ただし do 記法など特別扱いされてるところも) 以下の2つのメソッドを実装する return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b ついでに練習問題の最初のほうをやってしまいます。 …