[英]How implement 2^x++ in haskell
嗨我在Haskell编程功能,将二进制数转换为十进制
我有功能剩余
--return last bit
portion :: Integer -> Integer
portion10 n = n `div` 10
remainder10 :: Integer -> Integer
remaindern10 n = n `mod` 10
现在我想用binToDec使用递归
binToDec 0 = 0
binToDec binary = (remainder10 binary) * 2^x++ + binToDec (portion10 binary)
我需要知道如何在我的binToDec函数中实现2 ^ x ++:/请帮忙:)
首先,你不能在Haskell中更改变量。 几乎所有的东西都是不变的。 如果你想要一个计数器,最简单的方法是在函数中添加另一个参数:
binToDec binary = binToDec binary 0 where
binToDec' 0 _ = 0
binToDec' binary counter = (remainder10 binary) * 2^counter + binToDec' (portion10 binary) (counter+1)
其次,在这种情况下,你实际上可以做得更好。 注意,计算2^n
需要多次平方2,并进行一些额外的乘法运算。 你实际上可以没有它。
或者没有明确的递归,只需要使用列表函数
import Data.List
import Data.Tuple
binToDec x = sum $ zipWith (*) (unfoldr remainder x)
(iterate (*2) 1) where
remainder 0 = Nothing
remainder x = Just . swap $ divMod x 10
iterate (*2) 1
是你的问题的答案,如何“实现2^x++
”。
或者你可以这样做,只是另一个版本:
binToDec :: Int -> Int -> Int
binToDec 0 _ = 0
binToDec b c = mod b 10 * 2^c + binToDec (div b 10) (c + 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.