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 ControlData.ArrowBifunctor (first)
import Data.Char (intToDigit)
import Data.List (unfoldr)
import Data.Tuple (swap)
import Data.CharBool (intToDigitbool)
 
 
inBaseDigits :: String -> Int -> String
inBaseDigits ds n = reverse $ unfoldr go n
let base = length ds
where
in reverse go x$
unfoldr
| 0 < x = Just $ first (ds !!) (swap $ quotRem x (length ds))
| otherwise = Nothing((<*>)
| 0 < x =(bool Nothing . Just $. first (ds !!) (. swap $. flip quotRem x (length ds)base)
(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 =
9,655

edits