2017年2月15日水曜日

開発環境

関数プログラミング入門(Richard Bird (著)、山下伸夫 (翻訳)、オーム社)の第2章(単純なデータ型)、2.7(文字列)、練習問題2.7.1、2.7.2、2.7.3を取り組んでみる。

練習問題2.7.1、2.7.2、2.7.3

コード(Emacs)

s1, s2, s3 :: String
s1 = show (show 42)
s2 = show 42 ++ show 42
s3 = show "\n"

monthName :: Integer -> String
monthName n
  | n == 1 = "January"
  | n == 2 = "Feburary"
  | n == 3 = "March"
  | n == 4 = "April"
  | n == 5 = "May"
  | n == 6 = "June"
  | n == 7 = "July"
  | n == 8 = "August"
  | n == 9 = "Semptember"
  | n == 10 = "October"
  | n == 11 = "November"
  | n == 12 = "December"
  | otherwise = error "Invalid"
  
showDate :: (Integer, Integer, Integer) -> String
showDate (d, m, y) = show d ++ " " ++ (monthName m) ++ " " ++ show y

showDate' :: (Integer, Integer, Integer) -> String
showDate' (d, m, y) = show d ++ s ++ " " ++ (monthName m) ++ " " ++ show y  
  where r = mod d 10
        s | r == 1 = "st"
          | r == 2 = "nd"
          | r == 3 = "rd"
          | otherwise = "th"
          
main :: IO ()
main = do
  -- 2.7.1
  putStrLn ("MacMillan"  ++ "\n" ++ "Macmillan" ++ "\n" ++ "McMillan")
  -- 2.7.2
  putStrLn (show (s1 == "\"42\""))
  putStrLn (show (s2 == "4242"))
  putStrLn (show (s3 == "\"\\n\""))
  -- 2.7.3
  putStrLn (showDate (10, 12, 1997))
  putStrLn (showDate' (10, 12, 1997))
  putStrLn (showDate' (31, 12, 1997))

入出力結果(Terminal, ghci)

$ ghci sample7.hs
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( sample7.hs, interpreted )
Ok, modules loaded: Main.
*Main> main
MacMillan
Macmillan
McMillan
True
True
True
10 December 1997
10th December 1997
31st December 1997
*Main> :q
Leaving GHCi.
$

0 コメント:

コメントを投稿