A new module for performing tail-call elimination

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Jul 16 04:07:03 EDT 2015


On Wednesday 15 July 2015 19:29, Antoon Pardon wrote:

> Suppose I start with the following:
> 
> def even(n):
>     True if n == 0 else odd(n - 1)
> 
> def odd(n):
>     False if n == 0 else even(n - 1)

Well, both of those always return None, so can be optimized to:

even = odd = lambda x: None

:-)

Fixing the obvious mistake (failing to return anything) leads to the next 
mistake. When all you have is a hammer, everything looks like a nail.

def even(n):
    return n%2 == 0

def odd(n):
    return n%2 != 0


are faster, easier to understand, and don't turn into an infinite loop if 
you pass a negative integer.


The point is, people keep insisting that there are a vast number of 
algorithms which are best expressed using recursion and which require TCO to 
be practical, and yet when asked for examples they either can't give any 
examples at all, or they give examples that are not well-suited to 
recursion. Or, at best, examples which are equally good when written either 
using recursion or iteration.

I do believe that such examples surely must exist. But I'm yet to see one.



-- 
Steve




More information about the Python-list mailing list