Ask Your Question

Revision history [back]

Defining a function would give you a nice syntax for this kind of iteration.

For example, let us define right_iterate as follows.

def right_iterate(n, g):
    x, y = g.parent().gens()
    gg = y
    for k in xrange(n):
        gg = g(x, gg)
    return gg

Suppose we defined

sage: g = x*y^3 + x^3*y^11 - 1/21*x^11*y^5 - 2/5*x^3*y^13 + O(x, y)^60

then, instead of writing

sage: g(x, g(x, g(x, y)))
x^13*y^27 + 9*x^15*y^35 - 3/7*x^23*y^29 - 18/5*x^15*y^37 - 1/7*x^25*y^33 + O(x, y)^60

one can write

sage: right_iterate(3, g)
x^13*y^27 + 9*x^15*y^35 - 3/7*x^23*y^29 - 18/5*x^15*y^37 - 1/7*x^25*y^33 + O(x, y)^60

and instead of

sage: g(x, g(x, g(x, x)))
x^40 + 9*x^50 - 141/35*x^52 - 1/7*x^58 + O(x, y)^60

one can write

sage: right_iterate(3, g)(x, x)
x^40 + 9*x^50 - 141/35*x^52 - 1/7*x^58 + O(x, y)^60

Of course, you could modify the function to directly use (x, x) if you always want that.