Real World Haskell の読書ばかりしていたら、自分で全くプログラムを書かなくなった。それで、今日は ghci 上でおさらいをしてみた。
まず、階乗の計算。 Prelude> let fact 0 = 1; fact n = n * fact (n-1) Prelude> fact 5 120 次はフィボナッチ数列 Prelude> let fib = 0 : 1 : zipWith (+) fib (tail fib) Prelude> take 10 fib [0,1,1,2,3,5,8,13,21,34] クイックソート Prelude> let qsort [] = []; qsort (x:xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (>x) xs) Prelude> qsort [20,12,5,31] [5,12,20,31] サイコロを2つ振った時の目の出方 Prelude> [(x,y)| x <- [1..6], y <- [1..6]] [(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(6,1),(6,2),(6,3),(6,4),(6,5),(6,6)] その和 Prelude> [x+y| x <- [1..6], y <- [1..6]] [2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12] ここで Data.List モジュールをロード Prelude> :m + Data.List 上の和の並べ替え Prelude Data.List> sort [x+y| x <- [1..6], y <- [1..6]] [2,3,3,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,10,10,10,11,11,12] おなじスコアはまとめる。 Prelude Data.List> group $ sort [x+y| x <- [1..6], y <- [1..6]] [[2],[3,3],[4,4,4],[5,5,5,5],[6,6,6,6,6],[7,7,7,7,7,7],[8,8,8,8,8],[9,9,9,9],[10,10,10],[11,11],[12]] スコアと出現頻度のペアを作る。 Prelude Data.List> map (\x -> (head x, length x)) $ group $ sort [x+y| x <- [1..6], y <- [1..6]] [(2,1),(3,2),(4,3),(5,4),(6,5),(7,6),(8,5),(9,4),(10,3),(11,2),(12,1)] 7の目が一番出やすいのが分かった。 ペアを作って、とかスコアを並び替えてなど、抽象的な考えのままプログラムできてしまうので、プログラムを作っているのだという実感が涌かない。楽だからいいのだけれど。
by tnomura9
| 2012-05-31 16:49
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||