Skip to content

Instantly share code, notes, and snippets.

@rheum
Last active December 29, 2015 04:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rheum/7612605 to your computer and use it in GitHub Desktop.
Save rheum/7612605 to your computer and use it in GitHub Desktop.
Infinite Lists in Python
def ints(start):
        return (start, lambda: ints(start+1))
 
def map(f, (start, gen)):
        return (f(*start), lambda: map(f, gen()))
 
def zip((h1,t1), (h2,t2)):
        return ((h1,h2), lambda: zip(t1(), t2()))
 
def zip_with(f, l1, l2):
        return map(f, zip(l1, l2))
 
def fib():
        return (0, lambda: (1, lambda: zip_with(lambda x,y: x+y, fib(), fib()[1]())))
 
def take(n, (start, gen)):
        if n == 0:
                return []
        else:
                return [start] + take(n-1, gen())
 
def inf_it((h,t)):
        while True:
                yield h
                h,t = t()
 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment