Path: csiph.com!optima2.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!us.feeder.erje.net!newsfeed.fsmpi.rwth-aachen.de!newsfeed.straub-nv.de!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Marko Rauhamaa Newsgroups: comp.lang.python Subject: Re: Possibly Pythonic Tail Call Optimization (TCO/TRE) Date: Tue, 14 Jul 2015 10:05:46 +0300 Organization: A noiseless patient Spider Lines: 37 Message-ID: <87380rnrqt.fsf@elektro.pacujo.net> References: <55A3A853.4040006@rece.vub.ac.be> <55A3C366.6060602@rece.vub.ac.be> <87fv4r1fre.fsf@jester.gateway.sonic.net> <877fq3nuwo.fsf@elektro.pacujo.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="b7cb1518d23ec19d482dcc9c31d30fdd"; logging-data="11265"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+NMpqtIgx/APaL9zM3dUaD" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:f4Mz1m9Llqdvi/7/4ZwFOqiPDic= sha1:y7e6KEoVEii+y6rGT64Kz/dLPoc= Xref: csiph.com comp.lang.python:93790 Gregory Ewing : > Marko Rauhamaa wrote: >> How about "return"? > > How about "goto"? :-) > > That's not entirely an unserious suggestion -- if you > really believe that a "goto with arguments" is a good > feature for a language to have, you shouldn't be > afraid to spell it as such. > > def quicksort(array, start, end): > midp = partition(array, start, end) > if midp <= (start+end)//2: > quicksort(array, start, midp) > goto quicksort(array, midp+1, end) > else: > quicksort(array, midp+1, end) > goto quicksort(array, start, midp) This works already now: def quicksort(array, start, end): midp = partition(array, start, end) if midp <= (start+end)//2: quicksort(array, start, midp) return quicksort(array, midp+1, end) else: quicksort(array, midp+1, end) return quicksort(array, start, midp) It might even be tail-call optimized by Python. Only you can't count on it because the language spec doesn't guarantee it. Marko