Y Combinator

由于匿名函数(通常成为lambda函数但是跟lambda calculus不同)在递归时无法获得函数名,从而导致一些问题,而Y Combinator能很好地解决这个问题。利用不动点的原理,可以利用一般的函数来辅助得到匿名函数的递归形式,从而间接调用无法表达的真正的匿名函数。下面以一个阶乘的递归来说明。

#Python版本,后面会加上C++版本
#F(f) = f
def F(f,n):
    return 1 if n==0 else n*f(n-1)
#或者用lambda
#F = lambda f,n: 1 if n==0 else n*f(n-1)
#Y不能用lambda,因为Y会调用自己

#Y(F) = f = F(f) = F(Y(F))
def Y(F):
    return lambda n: F(Y(F),n)
a = Y(F)
# 6
print a(3)

一些解释:

  • F是伪递归函数,将真正的我们假设的匿名函数作为参数,有性质
    F(f)=f.
  • 好了以上是我们的已知条件,为了得到f的间接表达式,我们引入Y函数
    使得Y(F) = f
  • 所以有Y(F) = f = F(f) = F(Y(F)) (最终的目标是要用YF的组合表示f),所以很容易就得到了Y(F)的函数表达式为F(Y(F)),而Y不是匿名函数,所以能自身调用(其实感觉这东西没想象中那么玄乎~),上面的代码也就比较好理解了。我们假设的函数只有一个额外参数n,这完全可以自己添加其他参数,只需稍微修改Y中F的调用。

最后附上一段C++的实现代码:

//需要C++11支持
#include <iostream>
#include <functional>
//F(f) = f
int
F(std::function<int(int)> f, int n)
{
    return n==0 ? 1 : n*f(n-1);
}
//或者
//auto F1 = [](std::function<int(int)> f, int n) {
//    return n==0 ? 1 : n*f(n-1);
//};

//Y(F) = f = F(f) = F(Y(F))
std::function<int(int)>
Y(std::function<int(std::function<int(int)>,int)> F)
{
    return std::bind(F, std::bind(Y,F), std::placeholders::_1);
}

int main(int argc, char *argv[])
{
    auto f = Y(F);
    std::cout << f(3) << std::endl; //6
    return 0;
}
时间: 2024-11-04 20:11:50

Y Combinator的相关文章

对现有城市环境不满 孵化器Y Combinator打算自己建座城

美国科技创业公司孵化器Y Combinator合伙人阿多拉·常(Adora Cheung)周一表示,由于现有的城市无法提供获得成功所需的机会和居住环境,因此该公司将效仿其他科技公司的做法,自建一座城市. 包括Zappos和亚马逊在内的科技公司都公布了自建城市的计划,谷歌母公司Alphabet似乎也准备部署相似的计划. 阿多拉·常还着重强调自建城市试图解决的住房和交通问题.但该公司对改造其目前所在的加州山景城并无兴趣,而是希望在现行法律许可的情况下,从头建设一座最好的城市.不过,Y Combina

Y Combinator成功秘诀:“校友网络”异常强大

加速器正在成为创业生态系统中愈发重要的一部分. 它们在各地涌现,但没有哪家的名气能比得上位于硅谷的Y Combinator(以下简称"YC"). YC成立于2005年,迄今已在1,500位企业创始人身上投资了800万美元,在超过30个市场打造了400多家企业. 这些投资正在得到回报.去年,<福布斯>将YC评选为最有价值的孵化器,其地位领先于其他著名企业,如大卫·科恩(David Cohen)的TechStars和戴夫·麦克鲁尔(Dave McClure)的500 Start

硅谷梦旅人:Y Combinator的创业孵化经

新浪科技 郑峻 发自美国硅谷 青春是一场无悔的梦,创业就是追梦的旅程.无数的年轻人来到硅谷,在这个梦想的天堂挥洒自己的青春.追梦的旅程艰辛却并不孤单,因为硅谷有着全球最好的创业环境,帮助年轻人实现创业梦想.创业孵化器Y Combinator(以下简称YC)就是其中最为知名的梦旅人. YC的七年之旅 2005年3月,保罗·格拉汗姆(Paul Graham)对自己说:"我该为年轻人做点什么".当时他刚结束在哈佛大学的创业演讲,并将演讲内容编撰成书<如何开始创业>(How to

Y Combinator创始人预警:硅谷融资将面临艰难

中介交易 SEO诊断 淘宝客 云主机 技术大厅 Y Combinator联合创始人保罗·格雷厄姆(Paul Graham) 新浪科技讯 北京时间6月5日晚间消息,硅谷知名创业孵化器Y Combinator联合创始人保罗·格雷厄姆(Paul Graham)表示,硅谷融资的艰难时刻即将到来. 格雷厄姆在发送给其所投资公司的电子邮件中称:"Facebook IPO(首次公开招股)的糟糕表现将加大硅谷科技创业公司融资的难度,其影响有多大目前尚无法预测,可能很小,但也很可能很大." 格雷厄姆表示

Y Combinator创始人首次加入初创公司董事会

据国外媒体报道,对于他曾经帮助过的多家初创公司而言,Y Combinator创始人保罗•格雷厄姆(Paul Graham)可谓是一个教父级人物,但格雷厄姆从未进入其中任何一家公司的董事会.不过,格雷厄姆今日宣布,其已经同意加入医保众筹平台Watsi的董事会.Watsi筹集人们捐赠的资金,向那些缺乏医保的人提供帮助.Y Combinator此前决定资助Watsi,这是Y Combinator资助的首个非盈利性项目.具体来讲,Watsi帮助的对象是那些缺乏医保但又无力承担的人群.在Watsi的网站上

10家最热门的初创企业孵化器:Y Combinator上榜

500 Startups公司 加利福尼亚州山景城 这家公司长期在硅谷立足,天使投资人大卫·麦克卢尔(Dave McClure)拥有500 Startups品牌下的种子基金和初创企业加速器.这家公司创立于2010年,向每家接受孵化的企业投资5万美元.目前进入孵化项目的企业包括Fitocracy--这家网站主要把健身统计数据融入社交游戏,以及Forrst公司--这个网上社区面向软件开发人员开放.500 Startups公司的主要亮点在于,有160位世界各地的专家创业导师进行单独指导. 资本工厂(Ca

Y Combinator资助企业Heap:在数据分析领域挑战谷歌

在初创企业吸引新用户时,数据是最重要的东西.将注册按键安放网页的不同位置,会导致http://www.aliyun.com/zixun/aggregation/18536.html">新用户注册数量有所不同.良好的数据分析能够帮助企业找到最好的吸引用户注册的方式. Y Combinator资助的公司Heap希望能够将数据分析做的更好,他们希望能够帮助企业以更简单的方式获得更优秀的效果. 现在的很多分析工具,例如Google Analytics,都需要企业花费数天的时间进行部署.首先,企业需

硅谷奠基级种子孵化器 Y Combinator 增加 7 名成员

摘要: 今年2月,硅谷教父.著名种子孵化器 Y Combinator 的创始人 Paul Graham 撰文宣布,他将淡出 YC 的日常运营,只担任合伙人,并委任 Sam Altman 为 YC 董事长.自此开始,YC 扩增十倍的愿景开始 今年2月,"硅谷教父".著名种子孵化器 Y Combinator 的创始人 Paul Graham 撰文宣布,他将淡出 YC 的日常运营,只担任合伙人,并委任 Sam Altman 为 YC 董事长.自此开始,YC 扩增十倍的愿景开始落地. 日前 S

Y Combinator旗下信息云平台Plivo融资175万美元

Plivo是全球最著名的创意孵化器Y Combinator旗下的创业公司,Plivo为企业和开发者提供电话和短信接口云服务.Plivo今天宣布获得了来自安德森霍洛维茨,Battery Ventures,高通公司和SV天使共计175万美元的种子资金. 简单介绍一下背景,Plivo为企业和开发者提供电话和短信接口云服务,这样企业或者开发者就可以在自己的应用中提供电话和短信服务,而无需自己动手架设服务,也不用自己去向运营商申请认证,直接调用Plivo的API写几行代码即可.Plivo联合创始人文卡塔斯