2013年10月10日木曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の9章(自作メソッドの書き方), 9.5(練習問題)、古典的ローマ数字をHaskellで解いてみる。

その他参考書籍

古典的ローマ数字

コード(BBEdit)

sample.hs

{-# OPTIONS -Wall -Werror #-}

main :: IO ()
main = do
    putStrLn $ oldRomanNumeral 4
    putStrLn $ oldRomanNumeral 9
    mapM_ putStrLn $ map (\x -> (show x) ++ ": " ++  oldRomanNumeral x)
                         [100..120]

oldRomanNumeral :: Int -> String
oldRomanNumeral a =
    let numRomanPairs :: [(Int, Char)]
        numRomanPairs = [(1000, 'M'),
                         (500, 'D'),
                         (100, 'C'),
                         (50, 'L'),
                         (10, 'X'),
                         (5, 'V'),
                         (1, 'I')]

        iter :: Int -> [(Int, Char)] -> String -> String
        iter _ [] s = s
        iter num ps s = let p = head ps
                            n = fst p
                        in iter (mod num n)
                                (tail ps)
                                (s ++ replicate (div num n) (snd p))
    in iter a numRomanPairs ""

入出力結果(Terminal, runghc)

$ runghc sample.hs
IIII
VIIII
100: C
101: CI
102: CII
103: CIII
104: CIIII
105: CV
106: CVI
107: CVII
108: CVIII
109: CVIIII
110: CX
111: CXI
112: CXII
113: CXIII
114: CXIIII
115: CXV
116: CXVI
117: CXVII
118: CXVIII
119: CXVIIII
120: CXX
$

0 コメント:

コメントを投稿