繁体   English   中英

如何在haskell中实现2 ^ x ++

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

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