###################################################################### ## From Diving into Python ## ## remember making plurals of words? ## import re import string def buildRule((pattern, search, replace)): return lambda word: re.search(pattern, word) and re.sub(search, replace, word) def plural(noun, language='en'): lines = file('rules.%s' % language).readlines() patterns = map(string.split, lines) rules = map(buildRule, patterns) for rule in rules: result = rule(noun) if result: return result import re def rules(language): for line in file('rules.%s' % language): pattern, search, replace = line.split() yield lambda word: re.search(pattern, word) and re.sub(search, replace, word) def plural(noun, language='en'): for applyRule in rules(language): result = applyRule(noun) if result: return result ###################################################################### ## Fibonacci def fib(): x = 0 y = 1 while True: x, y = y, x+y yield x ###################################################################### ## Streams def ones(): x = 1 while True: yield x def twos(): o1 = ones() o2 = ones() while True: yield o1.next() + o2.next() def ints(): o = ones() i = ints() yield 1 while True: yield i.next() + o.next() def odd(): i = ints() while True: a = i.next() if a % 2: yield a ###################################################################### ## Sieve of Eratosthenes def exclude_multiples(n, ints): for i in ints: if (i % n): yield i def sieve(ints): while 1: prime = ints.next() if prime == 1: prime = ints.next() yield prime ints = exclude_multiples(prime, ints)