首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python不需要Y-Combinator吗?

Python不需要Y-Combinator吗?
EN

Stack Overflow用户
提问于 2012-02-19 17:08:24
回答 2查看 1.4K关注 0票数 4

在尝试理解Y-Combinator一个小时后...我最终得到了它,但后来我意识到,没有它也可以实现同样的事情……虽然我不确定我是否完全理解它的目的。

例如:带有Y-组合器的阶乘

代码语言:javascript
复制
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中的函数来实现

代码语言:javascript
复制
print (lambda f,m:f(f,m))((lambda g,n: n and n * g(g,n-1) or 1),input())

有人能告诉我python中的Y-Combinator有什么用途吗?

EN

回答 2

Stack Overflow用户

发布于 2012-02-19 17:19:54

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

代码语言:javascript
复制
def fac(n):
    return n * fac(n-1) if n else 1

Y组合器在实践中唯一有用的语言是"Turing are“语言,如Unlambda。即使是Lisp/Scheme用户在编写真正的程序时通常也不会使用Y组合子。

票数 8
EN

Stack Overflow用户

发布于 2012-02-19 17:21:26

Python不是基于Lambda演算的;当您这样提出这个问题时,它没有多大意义。lambda语句只是一个在本地创建匿名函数的实用功能:

代码语言:javascript
复制
>>> 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]

它之所以这样命名,是因为它是从函数式语言借来的,但它不是用来进行组合逻辑计算的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9347984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档