2013-12-19 4 views
-1

Что я хочу сделать, это повторно принять элемент из списка, и если он будет уважать это условие, я добавлю его в новый список и сохраню формат списка. Как сделать часть добавления ? Я получаю элемент с nth, и я пробовал несколько вариантов push, но я не получаю, где хочу.Ввод в список

Например, я (setq a 2) Теперь я хочу нажать 4 и позже 8. Как я могу разместить элемент и сохранить формат списка?

+1

Вам нужно больше примеров того, что вы хотите сделать, с точки зрения до и после. Прямо сейчас ваш вопрос просто расплывчатый. –

ответ

2

Если вы хотите нажать, используйте push:

(defparameter *a*()) 
(push 1 *a*) 
*a* ==> (1) 
(push 2 *a*) 
*a* ==> (2 1) 

Для конкретной задачи:

(dolist (x *old-list*) 
    (when (my-test-p x) 
    (push x *new-list*))) 
(setq *new-list* (nreverse *new-list*)) 

На самом деле, это может быть сделано с помощью стандартной библиотечной функции remove-if-not:

(setq *new-list* (remove-if-not #'my-test-p *old-list*)) 

или, если вы предпочитаете

(setq *new-list* (remove-if (complement #'my-test-p) *old-list*)) 
Смежные вопросы