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))
#if
pr = lambda s:s

namenum = lambda x: (x==1 and pr("one")) \
          or (x == 2 and pr("two")) \
          or (pr("other"))

print(namenum(1))
print(namenum(2))
print(namenum(3))

#for
#for e in lst:func(e)
lst=[1,2,3,4]
print(list(map(lambda x:x*x,lst)))

#順次作業
def f1():
    print("f1")

def f2():
    print("f2")

def f3():
    print("f3")

# let's create an execution utility function
do_it =lambda f: f()
list(map(do_it, [f1,f2,f3]))# map()-based action sequence