私はリストを反復し、要素でアクションを実行し、いくつかの基準に基づいて、アクティブな要素を取り除きたいと思います。しかし、以下の関数を使用すると、無限ループに終わります。リストを反復処理するときに現在の要素を削除できないのはなぜですか?
(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