Pythonのlambda式による再帰(Yコンビネーター)とカリー化

PythonによるYコンビネータの仕組みの(多分)わかりやすい説明より。

F = lambda f: lambda n: n if n < 2 else f(n - 1) * n
Y = lambda f: (lambda x: lambda m: f(x(x))(m))(lambda x: lambda m: f(x(x))(m))
print(Y(F)(5))

Pythonでカリー化を書いてみるより

def add_curried(x):
    def _add(y):
        return x+y
    return _add

print(add_curried(2)(3))

def add_curried2(x):
    return lambda y:x + y

print(add_curried2(2)(3))

add_curried3 = lambda x:lambda y:x + y

print(add_curried3(2)(3))