Haskell程序:将二进制转换为十进制


在Haskell中,我们可以使用`foldl`、递归和列表推导等函数将二进制数转换为十进制数。在第一个示例中,我们将使用`(binToDec = foldl (\acc x -> 2*acc + digitToInt x) 0)`;在第二个示例中,我们将使用基例`(binToDec "" = 0)`和递归情况`(binToDec (x:xs) = 2 * binToDec xs + digitToInt x)`函数;在第三个示例中,我们将使用`(binToDec = sum . zipWith (\x y -> 2^x * digitToInt y) [0..] . reverse)`。

算法

  • 步骤1 - 导入Data.Char库。

  • 步骤2 - 使用预定义函数及其表达式。

  • 步骤3 - 程序执行将从`main`函数开始。`main()`函数控制整个程序的运行。它被编写为`main = do`

  • 步骤4 - 初始化名为“input”的变量。它将保存要转换为相应十进制数的二进制数。

  • 步骤5 - 函数调用后,使用`putStrLn`语句将结果十进制数打印到控制台。

示例1

在这个示例中,使用`foldl`函数定义了一个函数来将二进制数转换为十进制数。

import Data.Char (digitToInt)

binToDec :: String -> Int
binToDec = foldl (\acc x -> 2*acc + digitToInt x) 0

main :: IO ()
main = do
   let input = "1111"
   let decimal = binToDec input
   putStrLn $ "Decimal equivalent: " ++ show decimal

输出

Decimal equivalent: 15

示例2

在这个示例中,定义了一个递归函数来将二进制数转换为十进制数。

import Data.Char (digitToInt)

binToDec :: String -> Int
binToDec "" = 0
binToDec (x:xs) = 2 * binToDec xs + digitToInt x

main :: IO ()
main = do
   let input = "1111"
   let decimal = binToDec input
   putStrLn $ "Decimal equivalent: " ++ show decimal

输出

Decimal equivalent: 15

示例3

在这个示例中,使用列表推导定义了一个函数来将二进制数转换为十进制数。

import Data.Char (digitToInt)

binToDec :: String -> Int
binToDec = sum . zipWith (\x y -> 2^x * digitToInt y) [0..] . reverse

main :: IO ()
main = do
   let input = "1111"
   let decimal = binToDec input
   putStrLn $ "Decimal equivalent: " ++ show decimal

输出

Decimal equivalent: 15

结论

在Haskell中,可以使用递归、列表推导或`foldl`函数将二进制数转换为十进制数。

更新于:2023年3月13日

673 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.