简单问题。
假设我的列表中有一堆NIL。有没有一种简单的方法可以删除NIL并只保留数字?。eval似乎在这里不工作。
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要(1 2 3 4)
Common Lisp,而不是remove(如果可以使用remove:)
(remove nil '(nil 1 nil 2 nil 3 nil 4))
在常见的lisp和其他方言中:
(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))
如果您使用Scheme,这将很好地工作:
(define lst '(NIL 1 NIL 2 NIL 3 NIL 4))
(filter (lambda (x) (not (equal? x 'NIL)))
lst)
正如我在上面的评论中所指出的,我不确定你使用的是哪种Lisp方言,但你的问题完全符合过滤器函数的模式(Python在这里有很好的过滤器文档)。SICP的一个方案实施是
(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)
(remove-if-not #'identity list)