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

ML语言实现:获取列表中小于指定整数的元素列表

搞定递归筛选列表元素的问题

嘿,我来帮你补全这个递归函数!你的现有代码已经摸到了门道——处理了空列表的基准情况,也判断了第一个元素是否符合条件,但问题在于只返回了第一个符合条件的元素,没有递归处理列表的剩余部分,而且语法上也缺少了else分支的处理,这会导致编译错误哦。

递归的核心思路

递归处理这类列表问题的关键是:

  • 基准情况:空列表直接返回空列表(你已经写对了)
  • 递归步骤:处理当前元素后,把结果和递归处理列表尾部的结果拼接起来

修正后的完整代码

fun smallethan(a, []) = [] 
  | smallethan(a, list) = 
      if hd(list) < a 
      then hd(list) :: smallethan(a, tl(list))  (* 符合条件就把当前元素拼到尾部结果前面 *)
      else smallethan(a, tl(list))              (* 不符合就直接返回尾部的处理结果 *)

代码解释

  1. 第一行是基准情况:当传入的列表为空时,直接返回空列表,递归终止。
  2. 第二行开始是递归分支:
    • 用hd(list)取出列表的第一个元素,判断是否小于a
    • 如果符合条件,就用::运算符把当前元素加到递归处理剩余列表(tl(list))得到的结果前面
    • 如果不符合条件,就直接递归处理剩余列表,跳过当前元素

测试示例

比如调用smallethan(5, [3,7,2,9,4]),会一步步递归:

  • 处理3:3<5 → 3 :: smallethan(5, [7,2,9,4])
  • 处理7:7不小于5 → 直接返回smallethan(5, [2,9,4])
  • 处理2:2<5 → 2 :: smallethan(5, [9,4])
  • 处理9:9不小于5 → 直接返回smallethan(5, [4])
  • 处理4:4<5 →4 :: smallethan(5, [])
  • 最后基准情况返回[],所以最终结果是[3,2,4]

这样整个递归逻辑就完整啦,能正确筛选出列表中所有小于a的元素~

内容的提问来源于stack exchange,提问作者M. Pollino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:16