2013年11月26日火曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の9章(集合と辞書)、9.5(練習問題)、8.をHaskellで解いてみる。

その他参考書籍

9.5(練習問題)、8.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
import qualified Data.Map as Map
import System.Random    

main :: IO ()
main = mapM_ putStrLn $ map (\x -> show x ++ ": " ++ (show $ isBalanced x)) $
                            map colorMap $ take 50 [0..]
    
isBalanced :: (Num a, Eq a) => Map.Map k a -> Bool
isBalanced m = if sum (Map.elems m) == 1 then True else False

colorMap :: Int -> Map.Map Char Double
colorMap n = Map.fromList $ zip ['R', 'G', 'B'] $
    map (\x -> (fromIntegral x :: Double) / (10.0 :: Double)) $
        take 3 $ randomRs ((1 :: Int), (5 :: Int)) (mkStdGen n)

入出力結果(Terminal, runghc)

$ runghc Sample.hs
fromList [('B',0.1),('G',0.1),('R',0.1)]: False
fromList [('B',0.3),('G',0.4),('R',0.3)]: True
fromList [('B',0.3),('G',0.2),('R',0.2)]: False
fromList [('B',0.5),('G',0.1),('R',0.1)]: False
fromList [('B',0.2),('G',0.1),('R',0.5)]: False
fromList [('B',0.2),('G',0.4),('R',0.4)]: True
fromList [('B',0.4),('G',0.2),('R',0.3)]: False
fromList [('B',0.1),('G',0.1),('R',0.2)]: False
fromList [('B',0.1),('G',0.1),('R',0.1)]: False
fromList [('B',0.3),('G',0.4),('R',0.5)]: False
fromList [('B',0.3),('G',0.2),('R',0.4)]: False
fromList [('B',0.5),('G',0.1),('R',0.3)]: False
fromList [('B',0.2),('G',0.1),('R',0.2)]: False
fromList [('B',0.2),('G',0.4),('R',0.1)]: False
fromList [('B',0.4),('G',0.2),('R',0.5)]: False
fromList [('B',0.1),('G',0.1),('R',0.4)]: False
fromList [('B',0.1),('G',0.1),('R',0.3)]: False
fromList [('B',0.3),('G',0.4),('R',0.2)]: False
fromList [('B',0.3),('G',0.2),('R',0.1)]: False
fromList [('B',0.5),('G',0.1),('R',0.5)]: False
fromList [('B',0.2),('G',0.1),('R',0.4)]: False
fromList [('B',0.2),('G',0.4),('R',0.3)]: False
fromList [('B',0.4),('G',0.2),('R',0.2)]: False
fromList [('B',0.1),('G',0.1),('R',0.1)]: False
fromList [('B',0.1),('G',0.1),('R',0.5)]: False
fromList [('B',0.3),('G',0.4),('R',0.4)]: False
fromList [('B',0.3),('G',0.2),('R',0.3)]: False
fromList [('B',0.5),('G',0.1),('R',0.2)]: False
fromList [('B',0.2),('G',0.1),('R',0.1)]: False
fromList [('B',0.2),('G',0.4),('R',0.5)]: False
fromList [('B',0.4),('G',0.2),('R',0.4)]: True
fromList [('B',0.1),('G',0.1),('R',0.3)]: False
fromList [('B',0.1),('G',0.1),('R',0.2)]: False
fromList [('B',0.3),('G',0.4),('R',0.1)]: False
fromList [('B',0.3),('G',0.2),('R',0.5)]: True
fromList [('B',0.5),('G',0.1),('R',0.4)]: True
fromList [('B',0.2),('G',0.1),('R',0.3)]: False
fromList [('B',0.2),('G',0.4),('R',0.2)]: False
fromList [('B',0.4),('G',0.2),('R',0.1)]: False
fromList [('B',0.1),('G',0.1),('R',0.5)]: False
fromList [('B',0.1),('G',0.1),('R',0.4)]: False
fromList [('B',0.3),('G',0.4),('R',0.3)]: True
fromList [('B',0.3),('G',0.2),('R',0.2)]: False
fromList [('B',0.5),('G',0.1),('R',0.1)]: False
fromList [('B',0.2),('G',0.1),('R',0.5)]: False
fromList [('B',0.2),('G',0.4),('R',0.4)]: True
fromList [('B',0.4),('G',0.2),('R',0.3)]: False
fromList [('B',0.1),('G',0.1),('R',0.2)]: False
fromList [('B',0.1),('G',0.1),('R',0.1)]: False
fromList [('B',0.3),('G',0.4),('R',0.5)]: False
$

{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。

0 コメント:

コメントを投稿