Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- for portuguese language
- num2ext :: Int -> String
- num2ext n | n >= 100 || n < 0 = ""
- | n < 20 && n >= 10 = case n of
- 10 -> "dez"
- 11 -> "onze"
- 12 -> "doze"
- 13 -> "treze"
- 14 -> "catorze"
- 15 -> "quinze"
- 16 -> "dezasseis"
- 17 -> "dezassete"
- 18 -> "dezoito"
- 19 -> "dezanove"
- | n < 10 = f (n, snd)
- | n `mod` 10 == 0 = f (n `div` 10, fst)
- | otherwise = connect . map f $ zip (digits n) [fst, snd]
- where
- f (c,level) | c == 0 = level ("", "zero")
- | c == 1 = level ("", "um")
- | c == 2 = level ("vinte", "dois")
- | c == 3 = level ("trinta", "três")
- | c == 4 = level ("quarenta", "quatro")
- | c == 5 = level ("cinquenta", "cinco")
- | c == 6 = level ("sessenta", "seis")
- | c == 7 = level ("setenta", "sete")
- | c == 8 = level ("oitenta", "oito")
- | c == 9 = level ("noventa", "nove")
- connect (x:[]) = x
- connect (x:y:_) = x ++ " e " ++ y
- digits n | n >= 10 = (n `div` 10) : digits (n `mod` 10)
- | otherwise = [n]
- main = let l = [0..99]
- in mapM_ putStrLn . map show $ zip l (map num2ext l)
Advertisement
Add Comment
Please, Sign In to add comment