在尝试理解Y-Combinator一个小时后...我最终得到了它,但后来我意识到,没有它也可以实现同样的事情……虽然我不确定我是否完全理解它的目的。
例如:带有Y-组合器的阶乘
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())阶乘通过引用另一个lambda中的函数来实现
print (lambda f,m:f(f,m))((lambda g,n: n and n * g(g,n-1) or 1),input())有人能告诉我python中的Y-Combinator有什么用途吗?
发布于 2012-02-19 17:19:54
Y组合器的目的是演示如何仅使用匿名函数编写任意递归函数。但是几乎每种语言都允许命名函数!换句话说,它主要是学术兴趣。当然,您可以在Python中更“自然”地定义阶乘:
def fac(n):
return n * fac(n-1) if n else 1Y组合器在实践中唯一有用的语言是"Turing are“语言,如Unlambda。即使是Lisp/Scheme用户在编写真正的程序时通常也不会使用Y组合子。
发布于 2012-02-19 17:21:26
Python不是基于Lambda演算的;当您这样提出这个问题时,它没有多大意义。lambda语句只是一个在本地创建匿名函数的实用功能:
>>> list( map(lambda x: x**2, [1, 2, 3, 4, 5]) )
[1, 4, 9, 16, 25]
# the same as:
>>> def sq(x):
... return x**2
...
>>> list( map(sq, [1, 2, 3, 4, 5]) )
[1, 4, 9, 16, 25]它之所以这样命名,是因为它是从函数式语言借来的,但它不是用来进行组合逻辑计算的。
https://stackoverflow.com/questions/9347984
复制相似问题