这是一个简单的代码,设计用于获取十进制数并返回表示二进制等效项的字符串.
b2d :: Int -> String
b2d 1 = "1"
b2d x = show (x `mod` 2) ++ b2d x/2
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试通过拥抱来运行时,它会给我一个错误:
:3 - Instance of fractional [Char] required for definition of b2d
Run Code Online (Sandbox Code Playgroud)
我不知道这意味着什么.谁能告诉我如何解决它?
干杯.
/是分数除法运算符.对于整数,您需要使用div(并添加括号作为newacct提到):
b2d x = show (x `mod` 2) ++ b2d (x `div` 2)
Run Code Online (Sandbox Code Playgroud)
要获得额外的效率点,请使用divMod仅执行一个部门:
b2d x = let (q,r) = x `divMod` 2
in show r ++ b2d q
Run Code Online (Sandbox Code Playgroud)