목록을 반복하고 요소를 사용하여 작업을 수행하고 일부 기준에 따라 활성 요소를 제거하려고합니다. 그러나, 아래의 함수를 사용하면 무한 루프가됩니다.목록을 반복 할 때 현재 요소를 삭제할 수없는 이유는 무엇입니까?
(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에 대한 임의의 참고 사항 : 예상되는 동작 섹션이 포함되어 있으면 신속하게이 질문에 답을 할 것입니다. - 인쇄 할 것으로 예상되는 내용 (및/또는 기타 부작용)은 무엇입니까? 반환 될 것으로 예상됩니다. – lindes