From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Newsgroups: gmane.emacs.help Subject: Re: iterating over a list while removing elements Date: Wed, 19 Mar 2014 08:39:39 -0400 Message-ID: References: <87mwgmwh6o.fsf@yun.yagibdah.de> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1395232819 10962 80.91.229.3 (19 Mar 2014 12:40:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 19 Mar 2014 12:40:19 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed Mar 19 13:40:27 2014 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WQFnG-0002gL-A4 for geh-help-gnu-emacs@m.gmane.org; Wed, 19 Mar 2014 13:40:26 +0100 Original-Received: from localhost ([::1]:40964 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQFnF-0007Et-LI for geh-help-gnu-emacs@m.gmane.org; Wed, 19 Mar 2014 08:40:25 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59638) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQFmw-0006wp-2B for help-gnu-emacs@gnu.org; Wed, 19 Mar 2014 08:40:13 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WQFmo-0000s7-P2 for help-gnu-emacs@gnu.org; Wed, 19 Mar 2014 08:40:06 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:53626) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQFmo-0000ru-FN for help-gnu-emacs@gnu.org; Wed, 19 Mar 2014 08:39:58 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1WQFmi-0001ms-6U for help-gnu-emacs@gnu.org; Wed, 19 Mar 2014 13:39:52 +0100 Original-Received: from 206-248-162-160.dsl.teksavvy.com ([206.248.162.160]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 19 Mar 2014 13:39:52 +0100 Original-Received: from monnier by 206-248-162-160.dsl.teksavvy.com with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 19 Mar 2014 13:39:52 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 37 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 206-248-162-160.dsl.teksavvy.com User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) Cancel-Lock: sha1:U7KCG+GMppaSURvZw1PaGyvG0aQ= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:96628 Archived-At: > (string-match "\\.$" dots) > (string-match "\\.\\.$" dots))) You meant (string-match "\\.\\'" dots) (string-match "\\.\\.\\'" dots))) > Surprisingly, this /appears/ to work. Can I take that for granted, or > is this a stupid thing to do? It`s like someone pulling the chair > you`re about to sit on from underneath you ... This is undocumented, so better not rely on the details of the behavior. You can rely on the fact that dolist will behave sanely, tho: it should not go berzerk, it should go through at least all elements still remaining in the list, and at most all elements that have been in the list. But you should better not assume that dolist will skip the "entry" you just removed. E.g. you could do the following, which should be somewhat faster (since `delete' is O(n)): (defun multisearch-make-files-list (directory) "Return a list of files in DIRECTORY, with directory references and directories removed." (let ((files-list (directory-files directory t)) (newlist '())) (dolist (entry files-list (nreverse newlist)) (when (and (not (multisearch-directory-ref-p entry)) (file-directory-p entry) (file-readable-p entry)) (push entry newlist))))) Stefan