ギャンブラーの錯覚をHaskellで実験してみた。ルーレットの赤と黒を1と0で表し、赤が4回続いたら黒に1枚、黒が4回続いたら赤に1枚賭けることにした。
プログラム名:bet.hs import System.Random main = do gen <- getStdGen print 1 print $ take 50 $ (randomRs (0,1) gen :: [Int]) print $ sum $ take 50 $ get (randomRs (0,1) gen :: [Int]) gen <- newStdGen print 2 print $ take 50 $ (randomRs (0,1) gen :: [Int]) print $ sum $ take 50 $ get (randomRs (0,1) gen :: [Int]) gen <- newStdGen print 3 print $ take 50 $ (randomRs (0,1) gen :: [Int]) print $ sum $ take 50 $ get (randomRs (0,1) gen :: [Int]) gen <- newStdGen print 4 print $ take 50 $ (randomRs (0,1) gen :: [Int]) print $ sum $ take 50 $ get (randomRs (0,1) gen :: [Int]) bet (1:1:1:1:xs) = 0 bet (0:0:0:0:xs) = 1 bet _ = 2 win xs | bet xs == xs !! 4 = 1 | bet xs == 2 = 0 | otherwise = -1 get ys@(x:xs) = win ys : get xs その結果がこれ、 Main> main 1 [1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,0,1,1] -1 2 [1,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,1] 0 3 [0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1] -2 4 [1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1] 2 1回目の得点が -1 、2回目が 0 、3回めが -2 、4回目が 2。 やはり、数学者は正しかった。頭の悪い管理人は実験してみないと納得できないので、Haskell でプログラムを作って実験してみるのは十分意味があるようだ。プログラマーでなくてもプログラミングを学ぶ理由はこんなところにある。数値計算の専門家でなくても、思考の道具の一つにシミュレーションを入れる時代なのかもしれない。 必勝法を編み出してカジノに行こうなどと考える前でよかった。
by tnomura9
| 2009-11-10 00:56
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||