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

如何在Scheme中按基准值将列表划分为三个部分?

实现Scheme列表三分区函数

我来帮你补全这个用于将列表拆分为三个部分的Scheme函数,刚好匹配你需要的需求——返回包含三个列表的嵌套列表,分别对应小于基准值、等于基准值、大于基准值的元素。

完整实现代码

(define (partition lst item)
  (define (partition-iter lst less same greater)
    (cond
      ((null? lst)
       ; 反转列表以保持原列表中的元素*相对顺序*
       (list (reverse less) (reverse same) (reverse greater)))
      ((< (car lst) item)
       (partition-iter (cdr lst) (cons (car lst) less) same greater))
      ((= (car lst) item)
       (partition-iter (cdr lst) less (cons (car lst) same) greater))
      (else ; 大于基准值的情况
       (partition-iter (cdr lst) less same (cons (car lst) greater)))))
  ; 初始化迭代器,三个累加列表都为空
  (partition-iter lst '() '() '()))

代码细节解释

  • 外层函数partition:接收待分区的列表lst和基准值item,内部定义了递归迭代器partition-iter来处理核心逻辑。
  • 迭代器partition-iter:
    • 四个参数分别是:当前待处理的子列表lst,以及三个累加列表less(存储小于基准值的元素)、same(存储等于基准值的元素)、greater(存储大于基准值的元素)。
    • 当lst为空时,反转三个累加列表(因为cons会把新元素添加到列表头部,反转后能还原原列表中元素的相对顺序),最后返回由这三个列表组成的嵌套列表。
    • 分三个条件分支处理当前元素:
      • 元素小于基准值:将元素加入less列表,继续递归处理剩余子列表。
      • 元素等于基准值:将元素加入same列表,继续递归处理剩余子列表。
      • 元素大于基准值:将元素加入greater列表,继续递归处理剩余子列表。
  • 初始调用:以空列表作为三个累加列表的初始值,启动迭代器开始处理。

示例使用

(partition '(1 3 2 5 3 4) 3)
; 返回结果:'((1 2) (3 3) (5 4))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:13