我尝试以二进制格式打印数字,我找到的函数是
showIntAtBase :: (Integral a, Show a) => a -> (Int -> Char) -> a -> ShowS
但我不明白它的工作原理,特别是我不知道函数参数从Int
转换为Char
的目的是什么。直观地说,这个函数应该只需要2个参数,要显示的数字和显示它的基数,这似乎是来自Numeric
的更具体函数的情况,如
showHex :: (Integral a, Show a) => a -> ShowS
或
showOct :: (Integral a, Show a) => a -> ShowS
那么(Int -> Char)
中的showIntAtBase
参数的用途是什么?
答案 0 :(得分:3)
Prelude Numeric> putStrLn $ showIntAtBase 10 (\n -> ['0'..'9']!!n) 26734 ""
26734
Prelude Numeric> putStrLn $ showIntAtBase 10 ("⁰¹²³⁴⁵⁶⁷⁸⁹"!!) 26734 ""
²⁶⁷³⁴
Prelude Numeric> putStrLn $ showIntAtBase 16 ("0123456789ABCdef"!!) 0xbeef ""
Beef
请注意!!
不应该用于严肃的应用程序,效率低下。更好地使用像
Prelude Numeric> let c0 = fromEnum '0' in showIntAtBase 10 (toEnum . (+c0)) 26734 ""
"26734"