abuse of lambda question

Stephen Hansen stephen at cerebralmaelstrom.com
Wed Jun 7 01:26:45 EDT 2000


Ack. _Why_? Ick, yick, sick!

I know how you can solve your problem, though.

C:> del lambdaabuse.py

Assuming you are in UNIX, replace the 'del' with 'rm'.

Please? :)

--Stephen

Ben Wolfson <rumjuggler at cryptarchy.org> wrote in message
news:stgrjs0sbt74kb3m4b7dbkkc87910fl1r6 at 4ax.com...
> I'm attempting to abuse Python's lambdas, and I've come across a
> problem I can't figure out.  Well, the problem is actually that I'm
> attempting to abuse lambdas, but aside from that I don't know why the
> abuse is failing.  Here's what I've got:
>
> def __everyother(): #factory to return lambdas.
> return lambda l, evens, odds, app=lambda a,e: lambda
> a=a,e=e:a.append(e): Compose(apply(map, (lambda e, evens=evens,
> odds=odds, l=l,app=app: If(l.index(e)%2==0, app(evens,e), app(odds,e))
> ,l)), Return(evens, odds))
>
> The functions it calls are:
>
> def Return(*args):
> return lambda args=args: args
>
> def Compose(*args):
> return lambda fs=args: For(len(fs), lambda c, fs=fs:
> If(lambda c=c,fs=fs: c==len(fs)-1, Return(fs[-1]()), fs[c]))()
>
> def For(count, fct, *args, **kwargs):
> for i in range(count):
> fct(i,*args,**kwargs)
>
> I can do this:
> >>> import lambdautils
> >>> a = lambdautils.__everyother()
> >>> evens, odds = [], []
> >>> a(range(20),evens, odds)
> <function <lambda> at 1510c00>
> >>> lam = a(range(20),evens, odds)
> >>> evens
> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
> >>> odds
> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
> >>> lam()
> Traceback (innermost last):
>   File "<pyshell#14>", line 1, in ?
>     lam()
>   File "C:\PYTHON16\lambdautils.py", line 16, in <lambda>
>     return lambda fs=args:\
>   File "C:\PYTHON16\lambdautils.py", line 4, in For
>     fct(i,*args,**kwargs)
>   File "C:\PYTHON16\lambdautils.py", line 17, in <lambda>
>     For(len(fs), lambda c, fs=fs: \
>   File "C:\PYTHON16\lambdautils.py", line 44, in If
>     return f()
> TypeError: call of non-function (type list)
>
> Can't quite figure out where the error occurs.
>
> --
> Barnabas T. Rumjuggler
>
> Policeman: So sir, did the suspect have four arms, each one holding a
> sword, and was she wearing a girdle adorned with severed hands, her
> whole body covered in the blood of past victims?
> Mr Flynn:  Well, it was overcast and everything, so it was hard to say
> for certain, you know?
>  -- John Flynn on apihna





More information about the Python-list mailing list