我一直在玩的Haskell數據類型在過去的幾天中,使用自定義的類型與羅馬數字的工作:在Haskell
data RomanNumeral = I | IV | V | IX | X | XL | L | XC | C | CD | D | CM | M deriving (Eq, Ord, Show, Read) stringToRomanNumeral :: String -> Maybe [RomanNumeral] stringToRomanNumeral romString | unRoman = Nothing | otherwise = Just $ map read $ map (\x -> [x]) romStringUpper where romStringUpper = map C.toUpper romString unRoman = any (`notElem` "MDCLXVI") romStringUpper
這工作得很好,但只捕獲1 - 木炭數字(所以我必須稍後計算IV,IX等的值)。
有沒有方法read
(或reads
)的輸入字符串,以使Maybe [RomanNumeral]的返回值也包含2個字符的數字?我試圖涉及模式匹配,但我似乎無法獲得正確的類型。
如果您只有數據類型中的實際數字,則表示I,V,X,C,D,M--您可以將整數作爲這些數字的列表。這會簡化一些事情。 – Sarah 2012-02-01 12:22:06
我的原始方法僅限於I,V,X,C,D,M,並且stringToRomanNumeral函數返回這些項目。但是將IV,IX等作爲獨立的類型構造函數大大簡化了十進制數的轉換(此處未顯示)。 – janeden 2012-02-01 12:58:08