thoga31

Number to String (PT)

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