LISP功能去除指甲 [英] LISP function to remove nils

查看:86
本文介绍了LISP功能去除指甲的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在LISP中编写一个函数,该函数将完全删除列表中的所有NILS.该列表可能是嵌套的,这意味着它可以在其中包含其他列表.例如,清单(((州L L L L L)NIL(州L L R L L)NIL)"应转换为((州L L L L L(州L L R L L))).

I want to write a function in LISP that will completely remove all NILS in a list. The list may be nested, meaning it can contain other lists inside. For example the list '((state L L L L) NIL (state L L R L) NIL) should be tranformed into '((STATE L L L L) (STATE L L R L)).

推荐答案

(defun remove-nil-recursively (x)
  (if (listp x)
    (mapcar #'remove-nil-recursively
            (remove nil x))
    x))

为您的示例工作:

[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))

并带有嵌套列表:

[2]> (remove-nil-recursively '(NIL (state L L nil R L) NIL))
((STATE L L R L))

但是要小心:

[3]> (remove-nil-recursively '(NIL (state L L (nil) R L) NIL))
((STATE L L NIL R L))

这篇关于LISP功能去除指甲的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆