LISP函数删除nils

Dim*_*sas 4 lisp function

我想在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)