这是一个简单的代码,用于取十进制数并返回表示二进制等效值的字符串。
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
我不知道这意味着什么。谁能告诉我如何解决它?
干杯。
答案 0 :(得分:9)
你可能想要(函数调用的优先级高于运算符):
b2d (x/2)
你的第一个案例也许不应该是2个参数
答案 1 :(得分: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