繁体   English   中英

在 Haskell 中将基数 4 字符串转换为十进制

[英]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

顺便说一下foldrreversemap都可以融合成一个foldl 最好在此处更改为foldl' (几乎总是如此)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM