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

如何在SML中编写更模块化的整数转数字列表代码?

SML 整数按位拆分函数优化实现

原代码存在的问题

  • 硬编码按位数做分支判断,仅支持最多7位整数,超出位数的输入会返回错误的拆分结果
  • 边界校验存在漏洞:等于100、1000等整十/整百/整千值时,会落入错误分支返回不符合预期的结果
  • 大量重复逻辑,无复用性,后续调整成本极高

优化方案

我们可以通过递归结构实现任意长度整数的按位拆分,无需硬编码位数判断:

(* 支持正负整数的通用版本 *)
fun digits(m: int) =
  let
    (* 先取绝对值适配负数输入,不需要支持负数可去掉该层处理 *)
    val num = Int.abs m
  in
    if num < 10 then
      [num]
    else
      (* 递归拆分除最后一位外的高位,再拼接当前最后一位 *)
      digits(num div 10) @ [num mod 10]
  end

如果只需要处理正整数,可使用更简洁的版本:

(* 仅支持正整数的简化版本 *)
fun digits(m: int) =
  if m < 10 then
    [m]
  else
    digits(m div 10) @ [m mod 10]

测试用例

  • 调用digits 12345 返回 [1,2,3,4,5],符合需求
  • 调用digits 9876543210 返回 [9,8,7,6,5,4,3,2,1,0],支持任意长度合法整数
  • 调用digits (-456) 返回 [4,5,6](通用版本)
  • 调用digits 0 返回 [0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:27:03