2009-09-23 12 views
4

這是一個簡單的代碼,它被設計爲取一個十進制數並返回一個表示二進制等價的字符串。定義所需的小數[Char]的實例?

b2d :: Int -> String 

b2d 1 = "1" 
b2d x = show (x `mod` 2) ++ b2d x/2 

然而,當我試圖通過擁抱來運行它,它給了我一個錯誤:

:3 - Instance of fractional [Char] required for definition of b2d 

我不知道這意味着什麼。任何人都可以告訴我如何解決它?

乾杯。

+1

你B2D的第一定義如下錯誤。該函數不需要兩個參數。 – 2009-09-23 04:45:56

回答

6

/是小數除法運算符。對於整數,你需要使用div(並添加括號,如newacct提到):

b2d x = show (x `mod` 2) ++ b2d (x `div` 2) 

對於額外的效率點,使用divMod僅執行一個除法:

b2d x = let (q,r) = x `divMod` 2 
     in show r ++ b2d q 
9

你可能想(函數調用比運營商更高的優先級):

b2d (x/2) 

也是你的第一種情況可能不應該採取2個參數