Skip to content

Instantly share code, notes, and snippets.

@ejamesc
Created November 17, 2011 13:54
Show Gist options
  • Save ejamesc/1373187 to your computer and use it in GitHub Desktop.
Save ejamesc/1373187 to your computer and use it in GitHub Desktop.
Sieve
"""Translated from Haskell:
let sieve(p:xs) = p : sieve (filter (\ x -> x `mod` p /= 0) xs) in sieve [2..]
"""
from itertools import ifilter
def ints(k):
yield k
while True:
yield k
k+=1
def tail(g):
next(g)
yield next(g)
for x in g:
yield x
def head(g):
return next(g)
def sieve(g):
yield head(g)
for x in sieve(ifilter((lambda x: x % head(g)!=0), tail(g))):
yield x
j = ints(2)
s = sieve(j)
i = 0
while i <= 8:
print next(s)
i+=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment