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

如何在LISP递归函数中传递变量与列表替代常量值

解决LISP递归函数传递比较变量的问题

你写的代码核心问题在于递归调用时漏掉了传递阈值参数x——递归过程中必须把比较用的x一直传递下去,否则后续的递归调用不知道该用什么值来和列表元素做比较。

正确实现代码

(defun greaterthanX (x l)
  (if l
      (if (> (car l) x)
          (cons (car l) (greaterthanX x (cdr l)))  ; 递归时必须传递x
          (greaterthanX x (cdr l))                 ; 此处同样要传递x
          )
      nil))  ; 列表为空时返回nil,明确递归终止条件

(print (greaterthanX 5 '(1 2 3 4 5 6 7 8 3)))

关键说明

  • 函数参数调整为(x l),第一个参数是自定义的比较阈值,第二个是待筛选的列表
  • 所有递归调用必须同时传入x和(cdr l),保证每一层递归都能拿到正确的比较基准
  • 显式写出nil作为空列表的返回值,让递归逻辑更清晰(LISP默认会返回nil,但显式声明可读性更强)
  • 调用时直接传数字5即可,不需要加单引号——加引号会把它变成符号'5,和数字比较可能引发错误(部分LISP实现会自动转换,但直接传字面量更规范)

测试输出

运行代码后会得到预期结果:

(6 7 8)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:15:39