这是一个简单的代码,旨在获取一个十进制数并返回一个表示二进制等效项的字符串。
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
我不知道这是什么意思。谁能告诉我如何修复它?
干杯。
最佳答案
/
是分数除法运算符。对于整数,您需要使用 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