我想迭代一个列表,使用元素执行一个动作并基于某些条件,我想摆脱活动元素。但是,当使用下面的函数时,我会以无限循环结束。为什么在迭代列表时为什么不能删除当前元素?
(defun foo (list action test)
(do ((elt (car list) (car list)))
((null list))
(funcall action elt)
(when (funcall test elt)
(delete elt list))))
(setq list '(1 2 3 4))
(foo list #'pprint #'oddp)
-> infinite loop
这是不可能的,因为它指向自己?最后,elt
当然是(car list)
。
这是一个正确的评估?我怎么能有效地解决这个问题?
@quartus的随机注释:如果它还包含预期的行为部分,我会很快给出这个问题upvote - 您期望打印什么(和/或其他副作用),以及您是做什么的希望被退回。 – lindes 2012-03-01 01:52:02