Removing NIL's from a list LISP

11,020

Solution 1

Common Lisp, instead of remove-if you can use remove:

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

Solution 2

In common lisp and perhaps other dialects:

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

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

Solution 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)
Share:
11,020
CyberShot
Author by

CyberShot

Updated on June 04, 2022

Comments

  • CyberShot
    CyberShot almost 2 years

    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)