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 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告