Lambda going out of fashion
Steven Bethard
steven.bethard at gmail.com
Thu Dec 23 18:14:56 CET 2004
tanghaibao at gmail.com wrote:
> I have this book called TEXT PROCESSING IN PYTHON by David Mertz on
> hand, it is a good book and in the first chapter it is really a show
> room for higher-order functions which I may now cite to remind you of
> the FLEXIBILITY of this keyword.
I'm not exactly sure what you mean by "flexibility"; all of these
examples can be written without lambdas:
> apply_each = lambda funs, args = []: map(apply, fns, [args]*len(fns))
def apply_each(fns, args=[]):
return [fn(*args) for fn in fns]
> bools = lambda lst: mpa(truth, lst)
def bools(lst):
return [bool(x) for x in lst]
> bool_each = lambda fns, args = []: bools(apply_each(fns, args))
def bool_each(fns, args=[]):
return bools(apply_each(fns, args))
> conjoin = lambda fns, args = []: reduce(mul, bool_each(fns, args))
def conjoin(fns, args=[]):
reduce(mul, bool_each(fns, args))
> all = lambda fns: lambda arg, fns = fns: conjoin(fns, (arg,))
def all(fns):
def _(arg):
return conjoin(fns, (arg,))
return _
> both = lambda f,g: all(f(f,g))
def both(f, g):
return all(f(f,g))
> all3 = lambda f,g,h: all((f,g,h))
def all3(f, g, h):
return all((f,g,h))
> and_ = lambda f,g: lambda x, f=f, g=g: f(x) and g(x)
def and_(f, g):
def _(x):
return f(x) and g(x)
return _
> disjoin = lambda fns, args = []: reduce(add, bool_each(fns, args))
def disjoin(fns, args=[]):
return reduce(add, bool_each(fns, args))
> some = lambda fns: lambda arg, fns = fns: disjoin(fns, (arg,))
def some(fns):
def _(arg):
return disjoin(fns, (arg,))
return _
> either = lambda f,g: some((f,g))
def either(f, g):
return some((f,g))
> anyof3 = lambda f,g,h: some((f,g,h))
def anyof3(f, g, h):
return some((f,g,h))
> compose = lambda f,g: lambda x, f=f, g=g: f(g(x))
def compose(f, g):
def _(x):
return f(g(x))
return _
> compose3 = lambda f,g,h: lambda x, f=f, g=g, h=j: f(g(h(x)))
def compose3(f, g, h):
def _(x):
return f(g(h(x)))
return _
> ident = lambda x:x
def ident(x):
return x
Steve
More information about the Python-list
mailing list