Created
February 14, 2014 22:05
-
-
Save metula/9010387 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def natural(): | |
"""A generator for all natural numbers.""" | |
n = 1 | |
while True: | |
yield n | |
n += 1 | |
def fib(): | |
"""A generator for all Fibonacci numbers.""" | |
a, b = 0, 1 | |
while True: | |
yield b | |
a, b = b, a + b | |
def merge(iter1, iter2): | |
"""Produces the sorted merge of two sorted infinite iterators.""" | |
left = next(iter1) | |
right = next(iter2) | |
while True: | |
if left < right: | |
yield(left) | |
left = next(iter1) | |
else: | |
yield(right) | |
right = next(iter2) | |
def merge3(iter1, iter2): | |
"""Produces the sorted merge of two sorted iterators.""" | |
left = next(iter1) | |
right = next(iter2) | |
while True: | |
if left < right: | |
yield(left) | |
try: | |
left = next(iter1) | |
except StopIteration: # iter1 is exhausted | |
yield(right) | |
remaining = iter2 | |
break | |
else: | |
yield(right) | |
try: | |
right = next(iter2) | |
except StopIteration: # iter2 is exhausted | |
yield(left) | |
remaining = iter1 | |
break | |
for elem in remaining: | |
yield(elem) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment