On 7/16/2015 3:45 AM, Antoon Pardon wrote:
On 07/15/2015 11:19 PM, Terry Reedy wrote:
On 7/15/2015 5:29 AM, Antoon Pardon wrote:

Can you explain how you would do mutual recursive functions?
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)

How do I rewrite those with your module?

I will not answer for Baruchel's tco module.  However, combining the
two bodies and following the general rule of replacing tail recursive
calls with assignments inside a while loop gives us

def even(n):
     return not odd(n)

def odd(n):
     while True:
         if not n:
             return False
         else:
             n  -= 1
         if not n:
             return True
         else:
             n -= 1
[ ... ]

I believe that this pattern should work with any set of mutually
recursive functions that always call each other in cyclic order.  A
more elaborate version does not have this limitation.


Nice of you to illustrate the warping involved.  ;-)

Glad you appreciate it. To me, the warping is no more than, and perhaps less than, and certainly less obnoxious than, the warping required when using Baruchel's tco module. (Opinions can vary, of course.) The result will definitely run faster than with B's tco.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to