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

求助:实现递归函数SORT-LIST筛选列表指定元素

修复递归筛选函数SORT-LIST的问题

首先你写的代码存在两个核心问题:

  • 语法错误:cond的第一个子句((null l) nil)后面多了一个闭合括号,导致cond提前结束,后面的表达式变成独立的顶级形式,运行时会直接报错。
  • 参数设计不符合需求:题目要求用可选变量指定筛选目标(默认是"apples"),但你当前的x是必填参数,没有设置默认值。

以下是修正后的代码,完全满足需求:

(defun sort-list (l &optional (x "apples"))
  (cond
    ((null l) nil)
    ((equal (first l) x)
     (cons (first l) (sort-list (rest l) x)))
    (t (sort-list (rest l) x))))

代码说明:

  1. 参数调整:把待处理列表l作为第一个参数,筛选目标x设为可选参数,默认值为"apples"。这样调用时可以直接传列表,默认筛选苹果;也可以手动指定x来筛选其他元素。
  2. 修复cond结构:所有判断子句都放在cond的同一组括号内,最后用t(代表“真”)处理剩余情况,避免冗余的重复判断。
  3. 递归逻辑:
    • 当列表为空(null l)时,返回空列表,作为递归的终止条件。
    • 如果当前元素等于目标x,就把它加入结果列表,再递归处理剩余元素。
    • 如果当前元素不是目标,直接递归处理剩余元素。

测试示例:

调用(sort-list '("apples" "peas" "apples" "peas")),会返回("apples" "apples");
如果要筛选"peas",可以传可选参数:(sort-list '("apples" "peas" "apples" "peas") "peas"),返回("peas" "peas")。

内容的提问来源于stack exchange,提问作者CL-Beginner Zoni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:40:31