開発環境
- 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(著)長尾 高弘(翻訳))の6章(条件分岐)、6.5(練習問題)、8をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
6.5(練習問題)、8.
コード(BBEdit)
Sample.hs
{-# OPTIONS -Wall -Werror #-} main :: IO () main = do mapM_ putStrLn $ map (\a -> "人口: " ++ (show $ fst a) ++ "万人, " ++ "面積: " ++ (show $ snd a) ++ ", 人口密度: " ++ (show $ ppa (fst a) (snd a)) ++ "\na.\n" ++ (show $ funcA a) ++ "\nb.\n" ++ (show $ funcB a) ++ "\nc.\n" ++ (show $ funcC a) ++ "\nd.\n" ++ funcD a) populations populations :: [(Double, Double)] populations = [(500.0, 15 * 10 ** 4), (500.0, 5 * 10 ** 4), (1000.0, 15 * 10 ** 4), (1000.0, 5 * 10 ** 4), (3500.0, 15 * 10 ** 4), (3500.0, 5 * 10 ** 4), (5000.0, 15 * 10 ** 4), (5000.0, 5 * 10 ** 4)] funcA :: (Double, Double) -> Maybe Double funcA (x, _) | x <= 1000 = Just x | otherwise = Nothing funcB :: (Double, Double) -> Maybe Double funcB (x, _) | x >= 1000 && x <= 3500 = Just x | otherwise = Nothing ppa :: Double -> Double -> Double ppa a b = 10 ** 4 * a / b funcC :: (Double, Double) -> Maybe String funcC (x, y) | ppa x y > 100 = Just "過密" | otherwise = Nothing funcD :: (Double, Double) -> String funcD (x, y) = if ppa x y > 100 then "過密" else "過疎"
入出力結果(Terminal, runghc)
$ runghc Sample.hs 人口: 500.0万人, 面積: 150000.0, 人口密度: 33.333333333333336 a. Just 500.0 b. Nothing c. Nothing d. 過疎 人口: 500.0万人, 面積: 50000.0, 人口密度: 100.0 a. Just 500.0 b. Nothing c. Nothing d. 過疎 人口: 1000.0万人, 面積: 150000.0, 人口密度: 66.66666666666667 a. Just 1000.0 b. Just 1000.0 c. Nothing d. 過疎 人口: 1000.0万人, 面積: 50000.0, 人口密度: 200.0 a. Just 1000.0 b. Just 1000.0 c. Just "\36942\23494" d. 過密 人口: 3500.0万人, 面積: 150000.0, 人口密度: 233.33333333333334 a. Nothing b. Just 3500.0 c. Just "\36942\23494" d. 過密 人口: 3500.0万人, 面積: 50000.0, 人口密度: 700.0 a. Nothing b. Just 3500.0 c. Just "\36942\23494" d. 過密 人口: 5000.0万人, 面積: 150000.0, 人口密度: 333.3333333333333 a. Nothing b. Nothing c. Just "\36942\23494" d. 過密 人口: 5000.0万人, 面積: 50000.0, 人口密度: 1000.0 a. Nothing b. Nothing c. Just "\36942\23494" d. 過密 $
{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。
0 コメント:
コメントを投稿