推进列表

时间:2013-12-19 15:51:59

标签: lisp

我想要做的是从列表中重新获取一个元素,如果它尊重条件,我会将它附加到一个新列表并保持列表格式。我如何做附加部分? 我正在使用nth获取元素,并且我尝试了push的几个变体,但我没有得到我想要的位置。

例如我做(setq a 2) 我现在想要推送4及更高版本8.如何将元素放在那里并保持列表格式?

1 个答案:

答案 0 :(得分: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*))