简单的问题。
说我的列表中有一堆NIL。是否有一种简单的方法来删除NIL并保留数字? eval似乎不适用于此。
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要(1 2 3 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)