[LUAU] doing 'e'
    Tim Newsham 
    newsham at lava.net
       
    Wed Nov 30 10:43:04 PST 2005
    
    
  
> Lets see a perl/python/... equivalent to this lisp exercise for obtaining 
> 'e':
[...]
> Euler's number, 'e', is approximately 2.7182818284590452354, and this is a 
> highly-inefficient way to extract it, but
> the function does tend toward 'e'.)
>
> Jim
If you like this kind of stuff, you'd probably get a kick out of
Doug McIlroy's "The Music of Streams", available on his home page:
http://www.cs.dartmouth.edu/~doug/
I toyed with the code in python a little:
   http://lava.net/~newsham/x/machine/powerseries.py
   http://lava.net/~newsham/x/machine/powerseries2.py
but neither is as elegant as his (pseudo-) haskell implementation
Heres your python code:
#!/usr/bin/python
import random
uniform = random.random		# gratuitous rename
def waitTime() :
 	"""Return the number of uniform variates whose sum just exceeds 1."""
 	sum,times = 0,0
 	while sum <= 1.0 :
 		sum,times = sum+uniform(), times+1
 	return times
def repeat(n, f, *args, **kwargs) :
 	"""Return the results of running a function n times."""
 	return [f(*args, **kwargs) for n in xrange(n)]
def average(l) :
 	"""
 	Return the average of a list.
 	Raise an exception for empty lists.
 	"""
 	return float(sum(l)) / len(l)
# show some waitTime results
print "Some waitTimes", repeat(10, waitTime)
# show averages for increasing lengths of repeat(waitTime)
print "average waitTimes", [average(repeat(n, waitTime)) for n in 1, 10, 100, 1000, 10000, 100000]
Tim Newsham
http://www.lava.net/~newsham/
    
    
More information about the LUAU
mailing list