簡體   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