Non-decimal radices/Convert: Difference between revisions
m
→{{header|Haskell}}: inBaseDigits version: Data.Bifunctor in lieu of Control.Arrow
m (→{{header|REXX}}: added/changed whitespace, used templates for the output sections.) |
m (→{{header|Haskell}}: inBaseDigits version: Data.Bifunctor in lieu of Control.Arrow) |
||
Line 1,378:
If we want to assume a default character set, then a general '''toBase''' (Int -> Int -> String) can be also be derived from '''inBaseDigits'''.
<lang haskell>import
import Data.Char (intToDigit)▼
import Data.List (unfoldr)
import Data.Tuple (swap)
inBaseDigits :: String -> Int -> String
inBaseDigits ds n =
let base = length ds
in reverse
unfoldr
| 0 < x = Just $ first (ds !!) (swap $ quotRem x (length ds))▼
(0 <))
n
inLowerHex :: Int -> String
inLowerHex = inBaseDigits "0123456789abcdef"
inUpperHex :: Int -> String
inUpperHex = inBaseDigits "0123456789ABCDEF"
inBinary :: Int -> String
inBinary = inBaseDigits "01"
inOctal :: Int -> String
inOctal = inBaseDigits "01234567"
inDevanagariDecimal :: Int -> String
inDevanagariDecimal = inBaseDigits "०१२३४५६७८९"
inHinduArabicDecimal :: Int -> String
inHinduArabicDecimal = inBaseDigits "٠١٢٣٤٥٦٧٨٩"
toBase :: Int -> Int -> String
toBase intBase n
Line 1,413 ⟶ 1,418:
inBaseDigits (take intBase (['0' .. '9'] ++ ['a' .. 'z'])) n
| otherwise = []
main :: IO ()
main =
|