[英]convert base 4 string to Decimal in Haskell
我有以下 function,它接受一个以 4 为底的字符串,并应该返回一个十进制 integer,但我的计算似乎是错误的,所以对于“22”,我需要得到 10,但它的结果是 5。请帮帮我解决这个问题:
base4Todec :: String -> Int
base4Todec = foldr (\c s -> s * 4 + c) 0 . reverse . map c2i
where c2i c = if c == '0' then 0 else 1
注意:我不允许使用导入
示例: base4Todec "22" = 10
只有在这种方式比常规方式更清晰的情况下,无点编写 function 才是好的。 在这里看起来不是这样。 那么,
base4Todec :: String -> Int
base4Todec cs = foldr (\c s -> s * 4 + c) 0 $ reverse $ map c2i cs
where
c2i c = if c == '0' then 0 else 1
变化不大,但现在原因很清楚了:
where
c2i c = if c == '0' then 0 else 1
为什么是1
? c2i '2' == 2
应该成立,不是吗?
你的字符串不是二进制的。 以 4 为底的最大允许数字是3 。
顺便说一下foldr
、 reverse
和map
都可以融合成一个foldl
。 最好在此处更改为foldl'
(几乎总是如此)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.