我在Haskell中實現了一個二進制到十進制的函數,目前我正在開發一個將十進制轉換爲二進制值的函數。 (我知道這些功能在某些地方是可用的,雖然它們不是Prelude.hs的一部分)如何在Haskell中實現十進制到二進制函數
我想出了下面的C語言程序代碼,但是我很難適應它的功能範例。
while (n > 0)
{
if (n % 2 == 1)
str = str + "1";
else
str = str + "0";
n = n/2;
}
我剛剛冒險進入Haskell的函數式編程,所以我對功能思維方式很陌生。我試圖使用遞歸和列表理解,但我不確定如何正確放置守衛和邏輯,因爲這涉及多個條件。我使用一個Int列表來保存單獨的二進制位。
--Decimal to binary
toBin:: Int -> [Int]
toBin 0 = [0]
toBin n | (n % 2 == 1) =
|(n % 2 == 0) =
我明白了,上面的模式可以讓程序選擇保護和結束評估函數。我在這裏錯了嗎?
下面是我想出原始遞歸來將任何基數(小於10,代替2)轉換爲小數。
toDecimal :: [Int] -> Int
toDecimal [] = 0
toDecimal (x:xs) = (x * 2 ^(length xs)) + bin xs
謝謝先進。
「需要將一個十進制字符串解析爲一個整數的函數」 - 就像,erm,'read'? – 2012-02-06 20:02:06
@DanielFischer:是的,但大概是OP試圖從頭開始實現這一點:)畢竟,'showIntAtBase'也存在。 – ehird 2012-02-06 20:04:22