问题
Simple question.
Say I have a bunch of NIL's in my list q . Is there a simple way to remove the NILs and just keep the numbers?. eval doesn't seem to work here.
(NIL 1 NIL 2 NIL 3 NIL 4)
I need (1 2 3 4)
回答1:
Common Lisp, instead of remove-if you can use remove:
(remove nil '(nil 1 nil 2 nil 3 nil 4))
回答2:
In common lisp and perhaps other dialects:
(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))
回答3:
If you're using Scheme, this will work nicely:
(define lst '(NIL 1 NIL 2 NIL 3 NIL 4))
(filter (lambda (x) (not (equal? x 'NIL)))
lst)
回答4:
As I noted in my comment above, I'm not sure which Lisp dialect you are using, but your problem fits exactly into the mold of a filter function (Python has good documentation for its filter here). A Scheme implementation taken from SICP is
(define (filter predicate sequence)
(cond ((null? sequence) nil)
((predicate (car sequence))
(cons (car sequence)
(filter predicate (cdr sequence))))
(else (filter predicate (cdr sequence)))))
assuming of course that your Lisp interpreter doesn't have a built-in filter function, as I suspect it does. You can then keep only the numbers from your list l
by calling
(filter number? l)
来源:https://stackoverflow.com/questions/9355918/removing-nils-from-a-list-lisp