我的30行代码
from collections import namedtuple
PData = namedtuple("PData", "p data")
#function signature: f(p: int) -> PData
def sequential(*fs):
def fn(p):
q, data = p, []
for f in fs:
r = f(q)
if r.p < 0:
return r
q, data = r.p, data+r.data
return PData(q, data)
return fn
def parallel(*fs):
def fn(p):
for f in fs:
r = f(p)
if r.p >= 0:
return r
return PData(-1, [])
return fn
def nothing(p): return PData(p, [])
def optional(f): return parallel(f, nothing)
def more(f): return sequential(f, star(f))
def star(f): return optional(lambda p: more(f)(p))
12条评论
www.freeblueplanet.com