我的30行代码



TheMatrix
2022-08-07
A-     A+


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