開発環境
- OS X Mavericks - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs (Text Editor)
- Haskell (純粋関数型プログラミング言語)
- GHC (The Glasgow Haskell Compiler) (処理系)
- The Haskell Platform (インストール方法、モジュール等)
C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)の12章(高度な型)、12.1(構造体)、12.2(共用体)、12.3(typedef)、12.4(enum型)、12.5(キャスト)、12.6(ビットフィールドまたは構造体の圧縮)、12.7(構造体配列)、12.9(プログラミング実習)、実習12-4をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
実習12-4.
コード(BBEdit)
Sample.hs
{-# OPTIONS -Wall -Werror #-} main :: IO () main = do putStrLn "出発空港のコードを入力" s <- getLine putStrLn "便のリスト" mapM_ print $ ticketsFrom s tickets ticket :: Ticket ticket = Ticket "abcde12345" "fgh" "ijk" (Time 10 20) (Time 14 30) data Ticket = Ticket {flight :: String, from :: String, to :: String, start :: Time, arrive :: Time} deriving (Eq) instance Show Ticket where show t = "便名: " ++ flight t ++ '\n':"出発空港コード: " ++ from t ++ '\n':"到着空港コード: " ++ to t ++ '\n':"出発時間: " ++ (show $ start t) ++ '\n':"到着時間: " ++ (show $ arrive t) data Time = Time {hour :: Int, minute :: Int} deriving (Eq) instance Show Time where show t = (show $ hour t) ++ "時" ++ (show $ minute t) ++ "分" tickets :: [Ticket] tickets = [Ticket "a" "abc" "def" (Time 10 20) (Time 14 30), Ticket "b" "def" "abc" (Time 10 20) (Time 14 30), Ticket "c" "abc" "ijk" (Time 11 20) (Time 15 30), Ticket "d" "abc" "ijk" (Time 12 20) (Time 16 30), Ticket "e" "fgh" "abc" (Time 11 20) (Time 15 30), Ticket "f" "fgh" "abc" (Time 12 20) (Time 16 30), Ticket "g" "abc" "ijk" (Time 12 20) (Time 16 30), Ticket "g" "abc" "ijk" (Time 13 20) (Time 17 30), Ticket "i" "abc" "ijk" (Time 14 20) (Time 18 30), Ticket "j" "fgh" "abc" (Time 12 20) (Time 16 30)] ticketsFrom :: String -> [Ticket] -> [Ticket] ticketsFrom s = filter ((s==) . from)
入出力結果(Terminal, runghc)
$ runghc Sample.hs 出発空港のコードを入力 abc 便のリスト 便名: a 出発空港コード: abc 到着空港コード: def 出発時間: 10時20分 到着時間: 14時30分 便名: c 出発空港コード: abc 到着空港コード: ijk 出発時間: 11時20分 到着時間: 15時30分 便名: d 出発空港コード: abc 到着空港コード: ijk 出発時間: 12時20分 到着時間: 16時30分 便名: g 出発空港コード: abc 到着空港コード: ijk 出発時間: 12時20分 到着時間: 16時30分 便名: g 出発空港コード: abc 到着空港コード: ijk 出発時間: 13時20分 到着時間: 17時30分 便名: i 出発空港コード: abc 到着空港コード: ijk 出発時間: 14時20分 到着時間: 18時30分 $
{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。
0 コメント:
コメントを投稿