这是一个简单的代码,旨在获取一个十进制数并返回一个表示二进制等效项的字符串。

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

10-08 12:47