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

第11章 切符番号遊び #3

11.7 練習問題 関数 choices、exprs、およびevalを用いて、1、3、7、10、25、50に対し可能な式は33,665,406個あり、そのうち4,672,540個のみが有効であることを確かめよ。 こんな感じでいいのかな。 もっと見た目よく関数合成したいんだけど。F#の |> みたい…

第11章 切符番号遊び #2

11.7 練習問題 ライブラリ関数concatとmapを用いる代わりに、リスト内包表記を使って、組み合わせの関数choicesを再定義せよ。 10章の練習問題でリストモナドについて書いたことを思い出せば簡単。 choices' :: [a] -> [[a]] choices' xs = [zs | ys <- subs…

Haskell vs F# リベンジ

昨日のHaskellコードをF#に移植してみた。 type Point = {X: int; Y: int;} static member ( + ) (p: Point, q: Point) = {X = p.X + q.X; Y = p.Y + q.Y;} static member ( - ) (p: Point, q: Point) = {X = p.X - q.X; Y = p.Y - q.Y;} type Pair = {Front…

会社のプログラミングコンテスト

10年ぐらい前の問題をHaskellで解いてみた。 問題は、「8×8ますの正方形のパネルを同じ形に2分割する分け方はいくつあるか」というもの。 ↓のコードは回転同型は考慮しているが鏡像同型は考慮してない。でもすっきりと書けたんじゃないかな。 (追記)Node型…

第11章 切符番号遊び #1

数日かけて写経したのでまとめて更新。 11.1 導入 切符番号遊びは、切符の端に書いてある四つの数字を使って、10になるように数式を組み立てる遊びである。 (中略)この章では、ゲームのルールを少し変更する。利用する数は任意の大きさで、全部を使わなく…

第10章 型とクラスの定義 #8

10.8 練習問題 以下のインスタンス宣言を完成させよ。 instance Monad Maybe where ... instance Monad [] where ... ここで[]は、[a]から型変数を取り除いたリスト型を表す。 ヒント:最初に、それぞれのインスタンスのメソッド return と >>= の型を考えよ…

第10章 型とクラスの定義 #7

10.8 練習問題 関数 isTaut と、前の二つの章で定義したパーサーと対話プログラムのライブラリを用いて、対話的に恒真式か検査する関数を実装せよ。ユーザーがキーボードからわかりやすい文法で命題を入力できるようにすること。 ヒント:8章で定義した数式…