You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Haskell中如何实现将十进制数转为逆序二进制数位的Bin函数?

Haskell 逆序二进制列表实现方案

首先做语法修正:Haskell 要求函数名必须小写开头,因此我们将函数名调整为bin。你给出的初步定义中后两行属于非法模式匹配写法,模式匹配只能匹配具体值,不能直接匹配运算表达式,调整后的实现如下:

完整实现代码

bin :: Integer -> [Int]
bin 0 = []
bin a = fromIntegral (a `mod` 2) : bin (a `div` 2)

逻辑说明

  • 边界条件:输入为0时直接返回空列表,符合题目要求
  • 递归逻辑:
    1. 用a mod 2计算当前数的最低二进制位,这正好是逆序列表的第一个元素
    2. 用a div 2将原数右移一位(去掉最低位),递归调用bin得到剩余位的逆序列表
    3. 把当前最低位拼接到递归结果的头部,就得到最终的逆序二进制列表
  • fromIntegral用来把Integer类型的取模结果转换为Int,匹配函数签名的返回值要求

效果验证

你给出的测试用例全部可以通过:

  • bin 0 返回 []
  • bin 1 返回 [1]
  • bin 2 返回 [0,1]
  • bin 10 返回 [0,1,0,1]

注意:该实现默认输入为非负整数,传入负数会进入无限递归,如果你需要处理负数场景,可以额外加参数判断抛出错误或者返回补码形式。

内容的提问来源于stack exchange,提问作者user17121388

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:48:03