BlankTar

about | blog | works | photo

lambdaって楽しいよね! 実用する気にはならないけれど!
という訳で、lambdaの小ネタを。

lambdaのルールとして、変数定義はできません。あと、文も書けません。if文とかね。
それをくぐり抜けようというのが今回の趣旨。
if文はとりあえず前に書いた三項演算子を使えばおっけー。

で、変数。
Lispのletみたいな事をします。
f = lambda a, b: (lambda x=a*b : x*a)
でおっけー。

def f(a, b):
	x = a * b
	return x * a
と同じ意味ね。
代入は出来ないけれど、まあなんとかなるだろ、きっと。

これを利用して
>>> (lambda x, func=(lambda self, x : (x * self(self, x-1)) if x>1 else x) : func(func, x))(5)
120
みたいな事も可能。階乗ね。
これで無名関数を代入せず再帰できる! ・・・見辛いだけだけどね。
< pythonのdoctestの使い方とか RFIDで遊んでみたかった。 >