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

LISP中如何去除自定义DFS函数返回结果中的NIL值

Lisp 右序DFS遍历多余NIL问题修复方案

问题根源

你现有代码的遍历逻辑本身符合右到左DFS的要求,返回嵌套点对和多余NIL的核心问题出在结果拼接环节:
Lisp中(cons A B)仅当B是列表时才会生成标准线性列表,当B是原子、A是NIL(空节点返回值)时,就会生成(NIL . 原子)的点对结构,多层递归嵌套后就形成了你遇到的带多余NIL的嵌套点对。

修复代码

仅需修改最后一个分支的拼接逻辑,无需调整原有遍历规则:

(defun DFS (tree)
  (cond ((null tree) ()) ; 空节点返回空列表,逻辑不变
        ; 首元素为列表时的展开遍历逻辑不变
        ((listp (car tree)) (DFS (append (car tree) (cdr tree))))
        ; 核心修改:将当前原子包装为单元素列表,用append做列表拼接,避免生成点对和多余NIL
        (T (append (DFS (cdr tree)) (list (car tree))))))

效果验证

执行测试用例(DFS '((((L E) F) T))),返回结果为(T F E L),符合预期且无多余NIL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:04