small challenge : limit((x+1)**0.5 for x in itially(2))

Paul McGuire ptmcg at austin.rr._bogus_.com
Wed Apr 5 11:54:50 EDT 2006


"Azolex" <cretin at des.alpes.ch> wrote in message
news:4433ccde$1_1 at news.bluewin.ch...
> 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





More information about the Python-list mailing list