> Is it possible to compose/iterate functions in sage by a functional way
> without any loop for or while.
>

Why don't you want to use a loop? I think it's the most natural way to
do this in Python.

> When I used mupad I could get the u(100) term of this sequence by :
>
> (sin@@100) (1) # u(0)=1 and u(n+1)=sin (u(n))
>

There's no default syntax for doing this kind of thing, but you could
always add a function that does it. This isn't perfect, but it does
what you want in one line:

reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1)

Of course, it's going to return something symbolic: you could use the
.n() method to get an approximation. Or apply it to something inexact.

sage: reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1)
sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

sage: reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1).n()
0.168852488727981

sage: reduce(lambda x,y: y(x), [sin for _ in xrange(100)], 1.0)
0.168852488727981

Of course, I really don't think any of those (including the mupad
example) is nearly as clear as

sage: x = 1
sage: for _ in xrange(100):
   ....:     x = sin(x)
   ....:
sage: x
sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
sage: x.n()
0.168852488727981

A nicer fix would be to create a new class for recurrence relations --
so you could do something like this:

sage: my_sequence = RecurrenceRelation(relation=lambda previous_term:
sin(previous_term), initial_value=1)
sage: my_sequence[100]
sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
sage: my_sequence[100].n()
0.168852488727981

-cc

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to