你有三个案例 car 现在。从当前单元格的角度来看它:
car
nil
关于 cdr ,假设嵌套的正确列表,它将始终是一个cons单元格或 nil 。
cdr
你需要对两者进行递归 car 和 cdr 什么时候他们是conses。
关于命名:Lisp阅读器的标准行为是提升所有内容,因此您显示的名称实际上是 REMOVENILTOP 和 REMOVEALL 。惯例是编写小写名称,其中部分用短划线分隔: remove-nil-top , remove-all 。我喜欢这些名字 remove-nil 和 tree-remove-nil 顺便说一句,更好
REMOVENILTOP
REMOVEALL
remove-nil-top
remove-all
remove-nil
tree-remove-nil
(defun removeAll (l) (cond ((null l) NIL) ((null (car l)) (removeAll(cdr l))) ((atom (car l)) (cons (car l) (removeAll (cdr l)))) (T (cons (removeAll (car l)) (removeAll (cdr l))))))
你忘了在最后一个克劳斯关闭第一个 removeAll 上 (car l) 用一个paranthesis。
removeAll
(car l)
您可以使用支持paranthesis自动填充的编辑器来避免此类错误。并自动缩进代码。你用什么编辑器?