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