从列表LISP中删除NIL

时间:2012-02-20 03:41:47

标签: list lisp null

简单的问题。

说我的列表中有一堆NIL。是否有一种简单的方法来删除NIL并保留数字? eval似乎不适用于此。

(NIL 1 NIL 2 NIL 3 NIL 4)

我需要(1 2 3 4)

4 个答案:

答案 0 :(得分:14)

Common Lisp,而不是删除 - 如果你可以使用remove:

(remove nil '(nil 1 nil 2 nil 3 nil 4))

答案 1 :(得分:10)

通常的口齿不清和其他方言:

(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))

答案 2 :(得分:1)

如果您正在使用Scheme,这将很有效:

(define lst '(NIL 1 NIL 2 NIL 3 NIL 4))

(filter (lambda (x) (not (equal? x 'NIL)))
        lst)

答案 3 :(得分:0)

正如我在上面的评论中所指出的,我不确定你使用的是哪种Lisp方言,但是你的问题完全符合过滤函数的模型(Python有过滤器here的良好文档)。从SICP获取的Scheme实现是

(define (filter predicate sequence)
  (cond ((null? sequence) nil)
        ((predicate (car sequence))
         (cons (car sequence)
               (filter predicate (cdr sequence))))
        (else (filter predicate (cdr sequence)))))

当然假设您的Lisp解释器没有内置的过滤器功能,我怀疑它确实如此。然后,您可以通过调用

仅保留列表l中的数字
(filter number? l)