#!python def nudger(str): def foo(i): c = i.next() while True: nudge = yield c if nudge: c = i.next() n = foo(iter(str)) n.next() return n def char(s): c = s.next() if c in map(chr, range(97,123)) + map(chr, range(65, 91)): s.send(1) return c def digit(s): c = s.next() if c in map(chr, range(48,58)): s.send(1) return c s = nudger("ab1984 ") print char(s) print digit(s) print char(s) def zeroormore(p,eat): def foo(s): while eat != None: v,eat = eat(p(s)) return v return foo def baseten(sofar): def foo(nextdigit): if nextdigit==None: return (sofar,None) else: now = sofar*10 + int(nextdigit) return (now, baseten(now)) return foo number = zeroormore(digit,baseten(0)) print number(s)