From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Oliver Scholz Newsgroups: gmane.emacs.help Subject: Re: tail recursion hack in Emacs Lisp? Date: Fri, 16 Jul 2004 19:37:54 +0200 Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Message-ID: References: NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: sea.gmane.org 1089999763 12635 80.91.224.253 (16 Jul 2004 17:42:43 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 16 Jul 2004 17:42:43 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Fri Jul 16 19:42:36 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1BlWjD-00045p-00 for ; Fri, 16 Jul 2004 19:42:35 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BlWlk-0004pG-R9 for geh-help-gnu-emacs@m.gmane.org; Fri, 16 Jul 2004 13:45:12 -0400 Original-Newsgroups: gnu.emacs.help X-Attribution: os X-Face: "HgH2sgK|bfH$; PiOJI6|qUCf.ve<51_Od(%ynHr?=>znn#~#oS>",F%B8&\vus),2AsPYb -n>PgddtGEn}s7kH?7kH{P_~vu?]OvVN^qD(L)>G^gDCl(U9n{:d>'DkilN!_K"eNzjrtI4Ya6; Td% IZGMbJ{lawG+'J>QXPZD&TwWU@^~A}f^zAb[Ru;CT(UA]c& User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3.50 (windows-nt) Cancel-Lock: sha1:QiXOEcivk/XeY892XErnGkU7R/U= Original-NNTP-Posting-Host: 82.83.134.210 Original-X-Trace: 16 Jul 2004 19:37:57 +0200, 82.83.134.210 Original-Lines: 48 Original-X-Complaints-To: abuse@arcor-ip.de Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!news.tele.dk!news.tele.dk!small.news.tele.dk!news-fra1.dfn.de!newsfeed.arcor-ip.de!news.arcor-ip.de!82.83.134.210 Original-Xref: shelby.stanford.edu gnu.emacs.help:124340 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 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 Xref: main.gmane.org gmane.emacs.help:19676 X-Report-Spam: http://spam.gmane.org/gmane.emacs.help:19676 Stefan Monnier writes: >> So my question is: Can anybody think of a case where this approach >> would break? > > I have another question: why is it better than CL's `do' ? Huh? You mean like: (do ((n 10 (1- n)) (r 1 (* n r))) ((= n 1) r)) I had no intention to suggest that it were better. iterate/named let is just different. Personally I find `do' hard to read, but that might be a matter of taste. I used `fact' just because it is the classical example. I can't think of a really good example right now, exept maybe this: (defun my-flatten-list (lst) (iterate walk-list ((lst lst) (acc nil) (stk nil)) (if (null lst) (if (null stk) (nreverse acc) (walk-list stk acc nil)) (if (listp (car lst)) (walk-list (car lst) acc (if (null (cdr lst)) stk (cons (cdr lst) stk))) (walk-list (cdr lst) (cons (car lst) acc) stk))))) There might be better examples. To quote the CMU CL manual: "The main advantage of using iterate over do is that iterate naturally allows stepping to be done differently depending on conditionals in the body of the loop." Oliver -- 29 Messidor an 212 de la Révolution Liberté, Egalité, Fraternité!