Pythonで複数行lambda
Pythonでのlambdaの構文自体は中途の改行を許さないけど、括弧でくくれば途中ではインデントも改行ありなしも関係なくなる:
print (lambda x: x + x) (10) #=> 20
そう考えると、PythonでもいわゆるDSL風なことも結構できるんじゃないだろうかと思う。
たとえば、以下のような関数を用意すると:
def let(val, func): return func(val) def rec(fun): def recfun(*args): return fun(recfun)(*args) return recfun
これによって以下のような式も書けたりもする:
print let(10, lambda x: let(x * 2, lambda y: x + y)) # => 30 print let(rec(lambda fact: (lambda n: n == 0 and 1 or n*fact(n-1))), lambda fact: fact(10)) #=> 3628800