是否有平台函数可以执行以下操作?
convertBase :: (Num a, Num b) => Int -> Int -> [a] -> [b]
将一个数字从基数'a'转换为基数'b',其中每个列表项都是数字。例如:
convertBase 2 10 [1,1,0,1] = [1, 3]
我希望那样说起来有意义,如果需要澄清什么,请告诉我
是否有平台函数可以执行以下操作?
convertBase :: (Num a, Num b) => Int -> Int -> [a] -> [b]
将一个数字从基数'a'转换为基数'b',其中每个列表项都是数字。例如:
convertBase 2 10 [1,1,0,1] = [1, 3]
我希望那样说起来有意义,如果需要澄清什么,请告诉我
使用Hackage的digits软件包:
import Data.Digits (digits, unDigits)
convertBase :: Integral a => a -> a -> [a] -> [a]
convertBase from to = digits to . unDigits from
如果你需要输入和输出类型不同,可以在其中添加fromIntegral
。此外,Integral
约束比Num
更有意义,因为你可能不想处理复杂或浮点数字。
decToBin = convertBase 10 2
,那么使用 decToBin [10,10]
是什么意思? - CMCDragonkaidecToBin [10, 10]
和 decToBin [1010]
是一样的。它只是将列表中的所有数字连接起来。 - CMCDragonkaireadInt :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS
fromBase :: Int -> String -> Int
fromBase base = fst . head . readInt base ((<base).digitToInt) digitToInt
toBase :: Int -> Int -> String
toBase base num = showIntAtBase base intToDigit num ""
fromBaseToBase :: Int -> Int -> String -> String
fromBaseToBase from to = toBase to . fromBase from
a
和b
,它们不都是一些Integral
吗? - Frerich Raabe