開発環境
- 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(著)長尾 高弘(翻訳))の7章(反復)、7.7(練習問題)、3、4、5、6.をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
7.7(練習問題)、3、4、5、6.
コード(BBEdit)
Sample.hs
{-# OPTIONS -Wall -Werror #-} main :: IO () main = do putStrLn "3." mapM_ print ([33..49] :: [Int]) putStrLn "4." mapM_ putStr $ map (\x -> show x ++ " ") ([10, 9..1] :: [Int]) putChar '\n' mapM_ putStr $ map (\x -> show x ++ " ") $ reverse ([1..10] :: [Int]) putStrLn "\n5." mapM_ print $ map (\x -> x ([2..22] :: [Int])) [average1, average2] putStrLn "6." mapM_ print $ map (\f -> f [1, 2, 3, -3, 6, -1, -3, 1]) [removeNeg1, removeNeg2] mySum :: [Int] -> Int mySum = foldr (+) 0 average1 :: [Int] -> Double average1 [] = 0.0 average1 ns = (fromIntegral . mySum $ ns) / (fromIntegral . length $ ns) average2 :: [Int] -> Double average2 [] = 0.0 average2 ns = (fromIntegral . sum $ ns) / (fromIntegral . length $ ns) removeNeg1 :: [Int] -> [Int] removeNeg1 = foldr (\x acc -> if x < 0 then acc else x:acc) [] removeNeg2 :: [Int] -> [Int] removeNeg2 = filter (\x -> x >= 0)
入出力結果(Terminal, runghc)
$ runghc Sample.hs 3. 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 4. 10 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 1 5. 12.0 12.0 6. [1,2,3,6,1] [1,2,3,6,1] $
{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。
0 コメント:
コメントを投稿