Python不需要Y-Combinator吗?

4 python recursion lambda y-combinator self-reference

经过一个小时的尝试了解Y-Combinator ......我终于明白了,但大部分时间我意识到没有它可以实现同样的事情......虽然我不确定我是否完全理解它的目的.

例如.使用Y-Combinator的因子

print (lambda h: (lambda f:f(f))(lambda f: h(lambda n: f(f)(n))))(lambda g: lambda n: n and n * g(n-1) or 1)(input())
Run Code Online (Sandbox Code Playgroud)

因子在另一个lambda中引用了该函数

print (lambda f,m:f(f,m))((lambda g,n: n and n * g(g,n-1) or 1),input())
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我,如果在python中有Y-Combinator的目的吗?

Die*_*Epp 8

Y组合器的目的是演示如何仅使用匿名函数编写任意递归函数.但几乎所有发明的语言都允许命名函数!换句话说,它主要是学术兴趣.当然,您可以在Python中更"自然地"定义阶乘:

def fac(n):
    return n * fac(n-1) if n else 1
Run Code Online (Sandbox Code Playgroud)

Y组合器在实践中实际上有用的唯一语言是"图灵tarpit"语言,如Unlambda.在编写真实程序时,Lisp/Scheme用户通常不会使用Y组合器.