我想遍历一个列表,对元素执行一个操作,并根据一些标准,我想摆脱活动元素。但是,当使用下面的函数时,我最终会陷入无限循环。
(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)
。
这是一个正确的评估吗?我怎样才能有效地解决这个问题?