From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.help Subject: Re: cl-dolist, dolist, cl-return, Date: Fri, 10 Jul 2015 00:00:47 +0200 Message-ID: <87lhepj8j4.fsf@nl106-137-147.student.uu.se> References: <87fv4za4jo.fsf@nl106-137-147.student.uu.se> <87k2ub2bgb.fsf@nl106-137-147.student.uu.se> <87oajmi6eh.fsf@nl106-137-147.student.uu.se> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1436479392 3110 80.91.229.3 (9 Jul 2015 22:03:12 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 9 Jul 2015 22:03:12 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Fri Jul 10 00:02:59 2015 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 1ZDJuF-0007iz-72 for geh-help-gnu-emacs@m.gmane.org; Fri, 10 Jul 2015 00:02:59 +0200 Original-Received: from localhost ([::1]:41959 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDJuE-0002e7-Hb for geh-help-gnu-emacs@m.gmane.org; Thu, 09 Jul 2015 18:02:58 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:51525) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDJtk-0002QS-QC for help-gnu-emacs@gnu.org; Thu, 09 Jul 2015 18:02:29 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZDJth-0000Ed-Cs for help-gnu-emacs@gnu.org; Thu, 09 Jul 2015 18:02:28 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:42563) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDJth-0000ED-6v for help-gnu-emacs@gnu.org; Thu, 09 Jul 2015 18:02:25 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1ZDJtf-0007KN-BS for help-gnu-emacs@gnu.org; Fri, 10 Jul 2015 00:02:23 +0200 Original-Received: from nl106-137-156.student.uu.se ([130.243.137.156]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 10 Jul 2015 00:02:23 +0200 Original-Received: from embe8573 by nl106-137-156.student.uu.se with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 10 Jul 2015 00:02:23 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Original-Lines: 47 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: nl106-137-156.student.uu.se Mail-Copies-To: never User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) Cancel-Lock: sha1:3YOHRMULJc7rAoGGGve8Bb5CITM= 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:105566 Archived-At: John Mastro writes: > Stefan means that if, given `(dolist (x (list 1 2 > 3)) ...)', you evaluated `(list 1 2 3)' on every > iteration you would end up doing something the moral > equivalent of > > (setq elt (nth 0 (list 1 2 3))) ;; first iteration > (setq elt (nth 1 (list 1 2 3))) ;; second iteration > > and so on, rather than > > (let ((the-list (list 1 2 3))) (setq elt (pop > the-list)) ;; first iteration (setq elt (pop > the-list))) ;; second iteration > > The latter case (which is how things really work) is > obviously much more efficient, because the former > case needlessly re-walks the list. Yes, there is no doubt in my mind the list shouldn't be evaluated on each iteration, for I don't know how many reasons! The reason I asked is the C for loop, which looks like this in C99 style: for (int i = 0; i < a_size; i++) { a[i] = ... ; } But sometimes, people are tempted to do like this: for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++) { a[i] = ... ; } In the real world probably it won't matter one bit most of the time but in the world of programming the craftsman don't want the computation to take place at every iteration, especially since the property doesn't change! If you don't have to deal with this in `dolist' I'm happy :) -- underground experts united http://user.it.uu.se/~embe8573