Компилятор - это рекурсивная сюръективная функция, отображающая точки пространства операторов на пространство функций и ошибок.
IronPython 2.0b4
Copyright (c) Microsoft Corporation. All rights reserved.
>>>meta=lambda *x: 'lambda self, *args, **var: (%s,)[-1]' % ', '.join(x)
>>>meta('args[0]+1')
'lambda self, *args, **var: (args[0]+1,)[-1]'
>>>t=eval(meta('args[0]+1'))
>>>t(None, 0)
1
>>>efor=lambda x, e: 'var.__setitem__((%s),(%s)[:]), [(None, ' % (x,e)
>>>efor=lambda x, e: 'var.__setitem__(("enumerator"),(%s)[:]), [(var.__setitem__(%s,eitem), ' % (e,x)
>>>eend=lambda x: ')[-1] for eitem in var["enumerator"]]'
>>>import sys
>>>echo=lambda s: sys.stdout.write('%s\n' % s)
>>>meta(efor("x","[1,2,3]"),"echo(var['x'])",eend())
'lambda self, *args, **var: (var.__setitem__(("enumerator"),([1,2,3])[:]), [(var.__setitem__(x,eitem), , echo(var[\'x\']), )[-1] for eitem in var["enumerator"]],)[-1]'
>>>eval(meta(efor("x","[1,2,3]"),"echo(var['x'])",eend()))
unexpected token ,
>>>efor=lambda x, e: 'var.__setitem__(("enumerator"),(%s)[:]), [(var.__setitem__(%s,eitem) ' % (e,x)
>>>eval(meta(efor("x","[1,2,3]"),"echo(var['x'])",eend()))
<function <lambda$0> at 0x000000000000002D>
>>>t=eval(meta(efor("x","[1,2,3]"),"echo(var['x'])",eend()))
>>>t(None)
name 'x' not defined
>>>efor=lambda x, e: 'var.__setitem__(("%s_enum"),(%s)[:]), [(var.__setitem__("%s",eitem) ' % (x,e,x)
>>>enext=lambda x: ')[-1] for eitem in var["%s_enum"]]' % x
>>>t=eval(meta(efor("x","[1,2,3]"),"echo(var['x'])",enext("x")))
>>>t(None)
1
2
3
[None, None, None]
>>>enext=lambda x: ')[-1] for eitem in var["%s_enum"]][-1]' % x
>>>t=eval(meta(efor("x","[1,2,3]"),"echo(var['x'])",enext("x")))
>>>t(None)
1
2
3
None
>>>