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

如何设计Racket函数获取列表最后一个正值(无正值返回'negative)

Racket自定义函数实现

需求说明

实现一个接收列表作为参数的函数:

  • 返回列表中最后一个大于0的正数值
  • 如果列表中不存在任何正数值,返回'negative
  • 实现时仅可使用指定的列表操作函数/值:cons、first、second、rest、empty、empty?、length、append、list、list-ref、make-list,基础语法、数值比较运算属于语言核心能力,不在限制范围内。

实现思路

采用线性递归从前向后遍历列表,用一个单元素列表存储遍历过程中遇到的最新正数:

  • 初始状态下未找到任何正数,存储值为空列表
  • 每遍历到一个元素,如果是正数就更新存储值为仅包含该正数的单元素列表;如果不是正数则保留原有存储值
  • 遍历完整个列表后,如果存储值为空说明没有找到正数,返回'negative;否则返回存储列表里的元素即可
  • 整个实现仅用到允许列表内的cons/first/rest/empty/empty?,没有使用范围外的列表处理函数。

完整代码

(define (last-positive lst)
  ; 内部递归迭代器:remain为待遍历的剩余列表,last-found为存储已找到最后一个正数的单元素列表
  (define (iter remain last-found)
    (if (empty? remain)
        ; 遍历结束,判断是否找到过正数
        (if (empty? last-found)
            'negative
            (first last-found))
        (iter (rest remain)
              ; 当前元素是正数则更新存储值,否则保留原值
              (if (> (first remain) 0)
                  (cons (first remain) empty)
                  last-found))))
  ; 初始调用:待遍历列表为输入全量列表,初始存储值为空
  (iter lst empty))

测试验证

  • 输入(last-positive (list 1 -2 3 -4)),返回3(列表最后一个正数为3)
  • 输入(last-positive (list -1 -2 -3)),返回'negative(无正数)
  • 输入(last-positive empty),返回'negative(空列表无元素)
  • 输入(last-positive (list -5 0 2 -3 7 -8)),返回7(最后一个正数为7)
  • 输入(last-positive (list 9)),返回9(单个正数元素)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:21:31