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

Racket中如何实现移除数值列表最小值并生成新列表

问题修正说明

你当前的代码逻辑是递归计算列表最小值,没有实现「移除元素构造新列表」的核心逻辑,最终只会返回列表中的最小数值,无法通过测试用例。

实现这个需求最清晰的思路是拆成两步:

  • 先遍历整个列表,拿到列表中的最小值
  • 再遍历原列表,跳过第一个和最小值相等的元素,剩余元素按原有顺序拼接为新列表即可(多个重复最小值场景下仅移除第一个,符合通用实现规则)
可运行代码
; 你提供的基础测试用例可直接通过
(check-expect (drop-lowest (list 3 4 5)) (list 4 5))
; 补充边界场景测试用例
(check-expect (drop-lowest (list 2)) '())
(check-expect (drop-lowest (list 5 3 4 3)) (list 5 4 3))
(check-expect (drop-lowest '()) #false)

; 内部辅助函数:递归查找列表最小值
(define (find-min lon base-min)
  (cond
    [(empty? lon) base-min]
    [else (find-min (rest lon) (min (first lon) base-min))]))

(define (drop-lowest lon)
  (cond
    [(empty? lon) #false]
    [else
     (let ([target-min (find-min (rest lon) (first lon))])
       ; 内部递归:移除第一个匹配的最小值
       (define (remove-first-match remain)
         (cond
           [(empty? remain) '()]
           [(equal? (first remain) target-min) (rest remain)]
           [else (cons (first remain) (remove-first-match (rest remain)))]))
       (remove-first-match lon))]))
逻辑说明
  • 空列表的处理逻辑和你原有代码保持一致,直接返回#false
  • 单元素列表移除最小值后返回空列表,符合预期
  • 重复最小值场景下不会删除所有同值元素,仅移除第一个出现的最小值,避免结果不符合需求
  • 全程用递归实现,没有调用额外的高阶函数,匹配你当前的学习阶段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:48:21