【发布时间】:2021-04-20 12:10:13
【问题描述】:
我正在尝试将整数从十进制整数转换为基于 4 的字符串,但我的展开器不起作用,我不确定为什么或如何替换它。我也不能使用进口。请帮我解决这个问题。
dec2Base4 :: Int -> String
dec2Base4 = map i2c . reverse . unfoldr decomp
where
decomp n = if n == 0 then Nothing else Just(n `mod` 4, n `div` 4)
i2c i = if i == 0 then '0' else if i == 1 then '1' else if i == 2 then '2' else '3'
例如:dec2Base4 10-> "22"
【问题讨论】:
-
为我工作。你怎么了?
-
$ghc -O2 --make *.hs -o main -threaded -rtsopts [1 of 1] Compiling Main ( main.hs, main.o ) main.hs:46:33: error: • Variable not in scope: unfoldr :: (Integer -> Maybe (Integer, Integer)) -> Int -> [Integer] • Perhaps you meant ‘foldr’ (imported from Prelude) -
你可以使用
iterate吗?scanl?unfoldr可以同时实现(或直接递归)。scanl可以按照zipandmap来实现... -
元:如果您有多个帐户,您可以要求版主将这些帐户合并为一个。 (我不确定确切的程序)。
-
您可以从通过递归获得的辅助字符串开始:
let { auxStr 0 = "" ; auxStr n = let (q,r) = divMod n 4 in (i2c r) : (auxStr q) }