開発環境
- OS X Mavericks - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs (Text Editor)
- Haskell (純粋関数型プログラミング言語)
- GHC (The Glasgow Haskell Compiler) (処理系)
- The Haskell Platform (インストール方法、モジュール等)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の9章(集合と辞書)、9.5(練習問題)、10.をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
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 コメント:
コメントを投稿