Recursive function defined within function => NameError

jeremy at cnri.reston.va.us jeremy at cnri.reston.va.us
Thu Feb 17 18:23:51 EST 2000


I'm not sure what your definition of better is <wink>, but the Y
combinator can be used to express recursive procedures.  Here's an
applicative-order version.

Jeremy

def self_apply(g):
    return g(g)

def Y(f):
    def stack(x, f=f):
        return f(lambda x=x:x(x))
    return self_apply(stack)

def test():
    def _fact1(recurse):
        def _fact2(n, recurse=recurse):
            if n == 0:
                return 1
            else:
                return n * recurse()(n - 1)
        return _fact2
    fact = Y(_fact1)
    print fact(7)
    print fact(12L)

if __name__ == "__main__":
    test()



Sent via Deja.com http://www.deja.com/
Before you buy.



More information about the Python-list mailing list