Удаление NIL из списка LISP - PullRequest
       54

Удаление NIL из списка LISP

4 голосов
/ 20 февраля 2012

Простой вопрос.

Скажите, у меня есть несколько NIL в моем списке q.Есть ли простой способ удалить NIL и просто сохранить цифры?Eval, похоже, не работает здесь.

(NIL 1 NIL 2 NIL 3 NIL 4)

Мне нужно (1 2 3 4)

Ответы [ 4 ]

14 голосов
/ 20 февраля 2012

Common Lisp, вместо remove-если вы можете использовать remove:

(remove nil '(nil 1 nil 2 nil 3 nil 4))
10 голосов
/ 20 февраля 2012

В общих словах и, возможно, на других диалектах:

(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))
1 голос
/ 20 февраля 2012

Если вы используете Схему, это будет хорошо работать:

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

(filter (lambda (x) (not (equal? x 'NIL)))
        lst)
0 голосов
/ 20 февраля 2012

Как я уже отмечал в своем комментарии выше, я не уверен, какой диалект Lisp вы используете, но ваша проблема вписывается в форму функции фильтра (Python имеет хорошую документацию для своего фильтра здесь ).Реализация Scheme, взятая из 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...