【发布时间】:2017-03-20 08:49:34
【问题描述】:
我有一个 Lisp 程序,它正在遍历嵌套列表并删除与传递给函数的元素匹配的元素。我的问题是,如果其中一个嵌套列表中的所有内容都被删除,我需要打印出 () 而不是 NIL。
(defun del (x l &optional l0)
(cond ((null l) (reverse l0))
((if (atom x) (eq x (car l)) (remove (car l) x)) (del x (cdr l) l0))
(T (del x (cdr l) (cons (if (not (atom (car l)))
(del x (car l))
(car l))
l0)))))
(defun _delete(a l)
(format t "~a~%" (del a l)))
(_delete 'nest '(nest (second nest level) (third (nest) level)))
这会返回
((SECOND LEVEL (THIRD NIL LEVEL))
我需要
((SECOND LEVEL (THIRD () LEVEL))
我尝试过使用 ~:S 格式,但这显然不适用于复合结构。我也试过用替换函数来替换 NIL,也没有结果。
【问题讨论】:
-
请问您为什么需要这样做?
标签: lisp common-lisp