在Haskell中如何实现将十进制数转为逆序二进制数位的Bin函数?
Haskell 逆序二进制列表实现方案
首先做语法修正:Haskell 要求函数名必须小写开头,因此我们将函数名调整为bin。你给出的初步定义中后两行属于非法模式匹配写法,模式匹配只能匹配具体值,不能直接匹配运算表达式,调整后的实现如下:
完整实现代码
bin :: Integer -> [Int] bin 0 = [] bin a = fromIntegral (a `mod` 2) : bin (a `div` 2)
逻辑说明
- 边界条件:输入为0时直接返回空列表,符合题目要求
- 递归逻辑:
- 用
amod2计算当前数的最低二进制位,这正好是逆序列表的第一个元素 - 用
adiv2将原数右移一位(去掉最低位),递归调用bin得到剩余位的逆序列表 - 把当前最低位拼接到递归结果的头部,就得到最终的逆序二进制列表
- 用
fromIntegral用来把Integer类型的取模结果转换为Int,匹配函数签名的返回值要求
效果验证
你给出的测试用例全部可以通过:
bin 0返回[]bin 1返回[1]bin 2返回[0,1]bin 10返回[0,1,0,1]
注意:该实现默认输入为非负整数,传入负数会进入无限递归,如果你需要处理负数场景,可以额外加参数判断抛出错误或者返回补码形式。
内容的提问来源于stack exchange,提问作者user17121388
相关产品推荐
相关产品推荐

