"Azolex" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > generators challenge > -------------------- > > define "limit" and "itially" > > so that > > limit(foo(x) for x in itially(bar)) > > works out the same as > > limit2(foo,bar) > > with > > def limit2(foo,bar) : > bar1 = foo(bar) > while bar != bar1 : > bar1,bar = foo(bar),bar1 > return bar > > Howzis?
-- Paul class Bag: pass data = Bag() data.x = None def itially(bar): if data.x is None: data.x = bar while 1: yield data.x def limit(z): eps = 1e-10 done = False z2 = z.next() z1 = z2 + 1 while abs(z2-z1) > eps: data.x = z2 z2, z1 = z.next(),z2 print "dbg>",z1,z2 return z1 print limit( x**0.5 for x in itially(2) ) Prints out: dbg> 1.41421356237 1.189207115 dbg> 1.189207115 1.09050773267 dbg> 1.09050773267 1.04427378243 dbg> 1.04427378243 1.02189714865 dbg> 1.02189714865 1.01088928605 dbg> 1.01088928605 1.00542990111 dbg> 1.00542990111 1.00271127505 dbg> 1.00271127505 1.00135471989 dbg> 1.00135471989 1.00067713069 dbg> 1.00067713069 1.00033850805 dbg> 1.00033850805 1.00016923971 dbg> 1.00016923971 1.00008461627 dbg> 1.00008461627 1.00004230724 dbg> 1.00004230724 1.0000211534 dbg> 1.0000211534 1.00001057664 dbg> 1.00001057664 1.00000528831 dbg> 1.00000528831 1.00000264415 dbg> 1.00000264415 1.00000132207 dbg> 1.00000132207 1.00000066104 dbg> 1.00000066104 1.00000033052 dbg> 1.00000033052 1.00000016526 dbg> 1.00000016526 1.00000008263 dbg> 1.00000008263 1.00000004131 dbg> 1.00000004131 1.00000002066 dbg> 1.00000002066 1.00000001033 dbg> 1.00000001033 1.00000000516 dbg> 1.00000000516 1.00000000258 dbg> 1.00000000258 1.00000000129 dbg> 1.00000000129 1.00000000065 dbg> 1.00000000065 1.00000000032 dbg> 1.00000000032 1.00000000016 dbg> 1.00000000016 1.00000000008 1.00000000016 -- http://mail.python.org/mailman/listinfo/python-list