我想在LISP中编写一个函数,它将完全删除列表中的所有NILS.该列表可以嵌套,这意味着它可以包含其他列表.例如,列表'((state LLLL)NIL(state LLRL)NIL)应转换为'((STATE LLLL)(STATE LLRL)).
Fre*_*Foo 10
(defun remove-nil-recursively (x)
(if (listp x)
(mapcar #'remove-nil-recursively
(remove nil x))
x))
Run Code Online (Sandbox Code Playgroud)
适用于您的示例:
[1]> (remove-nil-recursively '((state L L L L) NIL (state L L R L) NIL))
((STATE L L L L) (STATE L L R L))
Run Code Online (Sandbox Code Playgroud)
并使用嵌套列表:
[2]> (remove-nil-recursively '(NIL (state L L nil R L) NIL))
((STATE L L R L))
Run Code Online (Sandbox Code Playgroud)
但请注意:
[3]> (remove-nil-recursively '(NIL (state L L (nil) R L) NIL))
((STATE L L NIL R L))
Run Code Online (Sandbox Code Playgroud)