2013年11月27日水曜日

開発環境

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

その他参考書籍

9.5(練習問題)、10.

コード(BBEdit)

Sample.hs

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

main :: IO ()
main = mapM_ putStrLn $ map (\n -> let m1 = mkMap n
                                       m2 = mkMap (n + 10)
                                       m = dictIntersect m1 m2
                                   in "map1: " ++ show m1 ++ "\nmap2: " ++
                                      show m2 ++ "\nmap : " ++ show m)
                            [1..10]


dictIntersect :: (Ord k) => Map.Map k a -> Map.Map k b -> Map.Map k a
dictIntersect m1 m2 = foldr (\key acc -> if elem key (Map.keys m2) then
                                           Map.insert key (m1 Map.! key) acc
                                        else
                                           acc) (Map.fromList []) $ Map.keys m1

mkMap :: Int -> Map.Map Char Int
mkMap n = Map.fromList $
    zip (take 10 $ randomRs ('a', 'z') (mkStdGen n))
        (take 10 $ randomRs (0 :: Int, 9 :: Int) (mkStdGen n))

入出力結果(Terminal, runghc)

$ runghc Sample.hs
map1: fromList [('i',6),('k',8),('l',7),('n',7),('o',0),('u',0),('y',2),('z',9)]
map2: fromList [('a',8),('f',9),('h',3),('i',0),('k',6),('n',7),('p',9),('t',9),('v',7)]
map : fromList [('i',6),('k',8),('n',7)]
map1: fromList [('a',0),('g',2),('j',1),('n',3),('p',7),('t',1),('x',9),('y',8)]
map2: fromList [('d',9),('e',0),('f',9),('g',2),('i',2),('n',1),('q',6),('t',1),('u',6)]
map : fromList [('g',2),('n',3),('t',1)]
map1: fromList [('b',3),('d',5),('g',0),('k',4),('m',2),('n',5),('o',2),('v',9),('x',7)]
map2: fromList [('b',3),('f',1),('n',3),('o',6),('t',5),('w',6),('x',5)]
map : fromList [('b',3),('n',5),('o',2),('x',7)]
map1: fromList [('b',5),('c',0),('d',1),('f',3),('k',6),('l',1),('n',1),('o',6),('t',9)]
map2: fromList [('d',7),('m',8),('n',7),('s',8),('t',5),('w',6),('x',7),('z',9)]
map : fromList [('d',1),('n',1),('t',9)]
map1: fromList [('e',8),('g',0),('j',1),('k',0),('l',3),('n',3),('q',8),('r',9),('t',1)]
map2: fromList [('b',1),('c',8),('g',0),('j',7),('m',6),('n',3),('s',4),('w',0),('x',9)]
map : fromList [('g',0),('j',1),('n',3)]
map1: fromList [('d',1),('f',1),('j',9),('l',1),('n',3),('p',3),('q',4),('u',6)]
map2: fromList [('f',9),('l',5),('n',7),('q',4),('r',3),('v',9),('y',2)]
map : fromList [('f',1),('l',1),('n',3),('q',4)]
map1: fromList [('c',0),('e',0),('h',5),('j',9),('n',9),('r',5),('s',2),('u',4),('v',3)]
map2: fromList [('f',7),('g',4),('k',4),('l',9),('m',2),('n',1),('o',8),('t',9),('u',6),('v',7)]
map : fromList [('n',9),('u',4),('v',3)]
map1: fromList [('b',3),('d',9),('i',8),('l',9),('m',0),('n',5),('t',9),('z',9)]
map2: fromList [('f',3),('h',1),('n',5),('q',2),('r',9),('t',1),('u',0),('x',1),('y',8),('z',7)]
map : fromList [('n',5),('t',9),('z',9)]
map1: fromList [('f',5),('h',7),('i',4),('j',9),('m',8),('n',9),('o',2),('q',2)]
map2: fromList [('a',6),('e',2),('f',1),('h',5),('j',3),('n',9),('r',9),('u',4),('v',1),('y',0)]
map : fromList [('f',5),('h',7),('j',9),('n',9)]
map1: fromList [('d',5),('e',4),('h',9),('i',4),('l',7),('n',3),('o',4),('v',1),('w',8)]
map2: fromList [('b',3),('d',1),('g',0),('n',3),('o',8),('q',8),('r',5),('u',2),('y',6)]
map : fromList [('d',5),('n',3),('o',4)]
$

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

0 コメント:

コメントを投稿