锁定老帖子 主题:Java 语言中的函数编程
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-09-17
什么是Y Combinator呢?可以这样说
Y 就是这样一个操作符,它作用于任何一个 (接受一个函数作为参数的) 函数 F,就会返回一个函数 X。再把 F 作用于这个函数 X,还是得到 X。所以 X 被叫做 F 的不动点(fixed point)。 所以我们常常见到 "(Y F) = (F (Y F))" 这种说法。比如上面的例子中的 lambda x,t,g:Operator(x,g(t)) 就是一个针对Cfold1的Y Combinator, 因为 cfold1(lambda x,t,g:Operator(x,g(t)),z,l) = cfold1(x+g(t),0,[1,2,3,4]) 这个Y Combinator 对于整个计算机科学来说是如此的重要,以至于麻省理工学院的计算机系用它来做系徽 ![]() 好了,基本的概念说完了。至于这个Y Combinator有啥用,他数学上的意义是什么。今天来不及了,我要去南京,你们谁在南京的说?请我吃饭哈。我礼拜六晚上回来继续这个话题把。 |
|
返回顶楼 | |
发表时间:2004-09-17
Trustno1 写道 什么是Y Combinator呢?可以这样说
Y 就是这样一个操作符,它作用于任何一个 (接受一个函数作为参数的) 函数 F,就会返回一个函数 X。再把 F 作用于这个函数 X,还是得到 X。所以 X 被叫做 F 的不动点(fixed point)。 所以我们常常见到 "(Y F) = (F (Y F))" 这种说法。比如上面的例子中的 lambda x,t,g:Operator(x,g(t)) 就是一个针对Cfold1的Y Combinator, 因为 cfold1(lambda x,t,g:Operator(x,g(t)),z,l) = cfold1(x+g(t),0,[1,2,3,4]) 这个Y Combinator 对于整个计算机科学来说是如此的重要,以至于麻省理工学院的计算机系用它来做系徽 ![]() 好了,基本的概念说完了。至于这个Y Combinator有啥用,他数学上的意义是什么。今天来不及了,我要去南京,你们谁在南京的说?请我吃饭哈。我礼拜六晚上回来继续这个话题把。 老师好!老师再见! |
|
返回顶楼 | |
发表时间:2004-09-17
Trustno1 写道 什么是Y Combinator呢?可以这样说
Y 就是这样一个操作符,它作用于任何一个 (接受一个函数作为参数的) 函数 F,就会返回一个函数 X。再把 F 作用于这个函数 X,还是得到 X。所以 X 被叫做 F 的不动点(fixed point)。 所以我们常常见到 "(Y F) = (F (Y F))" 这种说法。比如上面的例子中的 lambda x,t,g:Operator(x,g(t)) 就是一个针对Cfold1的Y Combinator, 因为 cfold1(lambda x,t,g:Operator(x,g(t)),z,l) = cfold1(x+g(t),0,[1,2,3,4]) 这个Y Combinator 对于整个计算机科学来说是如此的重要,以至于麻省理工学院的计算机系用它来做系徽 ![]() 好了,基本的概念说完了。至于这个Y Combinator有啥用,他数学上的意义是什么。今天来不及了,我要去南京,你们谁在南京的说?请我吃饭哈。我礼拜六晚上回来继续这个话题把。 俺在南京,五台山那边有家饭馆的猪手不错! |
|
返回顶楼 | |
发表时间:2004-09-17
1.cfold1 要求三个参数,一个运算规则f2,一个初始值z,还有一个列表list
1.1这个运算规则f2也要三个参数,数值x,数值y和一个运算规则f1, 1.2f2会求出第一个数值x与f1对第2个数值y计算结果之和。也就是说f2所要求的运算规则只能处理一个参数y 2.如果列表为空,cfold1就返回那个初始值 3.否则,他就根据运算规则对列表的最后一个值 、 初始值 、其本身的运算规律 进行 f2的运算 也就是说,cfold1把自己作为f2所要求的f1规则,但进行了扩展,把f2和list递归下去不变 递归结束的标记就是list为空的时候(不懂得就是为什么f1(x)怎么可以变成f1(x,y,z),所以牵强了一下) ok!根据倒退法开始计算 结束的时候cflod1的运算规律是返回初始值,也就是f2给出的第2个值,这里是0 list.length = 0 return 0 list.length = 1 return list[0] + 0 = 1 list.length = 2 return list[1] + 1 = 3 list.length = 3 return list[2] + 3 = 6 list.length = 4 return list[3] + 6 = 10 |
|
返回顶楼 | |
发表时间:2004-09-17
Trustno1 写道 什么是Y Combinator呢?可以这样说
Y 就是这样一个操作符,它作用于任何一个 (接受一个函数作为参数的) 函数 F,就会返回一个函数 X。再把 F 作用于这个函数 X,还是得到 X。所以 X 被叫做 F 的不动点(fixed point)。 所以我们常常见到 "(Y F) = (F (Y F))" 这种说法。 我的理解是通过对一个函数进行Y操作,可以得到一个F无法影响其返回结果的X函数,也就是说F(X(variable)) = X(variable)。任何一个?太强了,这个操作符是什么? |
|
返回顶楼 | |
发表时间:2004-09-17
[为整体理解帖子顺畅,将本人无关言论删除]
|
|
返回顶楼 | |
发表时间:2004-09-18
俺终于从南京回来了,经过地狱式的沪宁高速公路,我彻底了解了其实建筑工程的badsmell是相当的严重。好累,继续今天的话题么?阿老是上计算机课也没有意思。我们上一堂美术鉴赏课,德智体美劳全面发展么。今天我们就轻松一下,欣赏几幅荷兰艺术家Maurits Cornelis Escher(1898-1972)美术作品。把严肃的话题留到明天
首先给大家带来的两幅是<互绘的双手> ![]() <鱼和规模> ![]() Escher的艺术作品表现的一个核心概念是自我复制--这被许多人认为已经逼近了大脑知觉这个难题的核心,并且至今计算机还不具备成功地模仿人类大脑处理信息能力。平版画 "互绘的双手"和木版画"鱼和规模"用不同的方法表现了这个思想。前者的自我复制是直接的,概念化的。双手互绘对方,互绘的方式就是意识思考和构建自己的方式,神奇的是,在这里自我和自我复制是连结在一起的,也是相互同等的。 另一方面, 在"鱼和规模"这幅画中,自我复制具有更大的功能; 人们也许宁愿称之为自我相似。这样木板画描述的就不仅是鱼,而是所有的有机体。因为,尽管从物理角度来说,我们不是由微小的自我复制建造起来的, 但是,从信息理论角度说,我们的确是以这样一种方式建立起来的,因为我们身体上的每一个细胞都以DNA的形式携带了我们个体的完整信息。 在更深层次的水平上,自我复制是一种我们的认知世界互相反映和互相交错的结果。我们每一个人都像一本书里的正在读他(或她)自己的故事的人物,或者像反映它自身风景的一面镜子那样。许多埃舍尔的作品都展现了相互交错的世界这个主题。最典型的是这第三副平版画 <三个圆球II > ![]() 画家利用了球形镜面的反射原理。这里, 正如Hofstatder提到的那样"世界的每个部分似乎都包含它,也似乎都被包含进去了, . . .."。这些球体彼此相互反射,折射出艺术家自己、他工作的房间和他用来画这些圆球的纸。 |
|
返回顶楼 | |
发表时间:2004-09-18
本想今晚可以继续上数学课的, 看来要等到明天了 . 只有几分钟了
![]() |
|
返回顶楼 | |
发表时间:2004-09-19
刚刚吃完中午饭。我们继续课程,在进入新课程之前我想对庄表伟提出的I/O和函数语言的问题作一个非常必要的补充。首先我以前一直反复的强调Church-Turing Thesis,这个结论告诉我们函数式语言和命令式语言是等价的。但是我们首先要清楚,这种等价的含义。是什么等价?这里说的等价应该是可计算性的等价。因此I/O和可计算性本来就没有任何关系。拿图灵机来说,它根据纸带上的输入,按照它内部的转移函数来移动读写头、改写纸带、改变自身状态,最终在某一时刻停机(当然也可能陷入死循环)。这个过程是确定的。从本质上说,设纸带支持的字符集为 Σ,那么这个过程就是计算一个定义在 Σ* 上的函数 —— 这个就是人们一般在计算理论这个领域中所说的“计算”二字的含义,也是人们说 lambda 演算和图灵机“在计算能力上等价”的基础。
因此,输入输出是不包含在这个“计算过程”之中的,图灵机同样也没有输入输出的能力。当图林机开始运算之前,问题实例就已经放在了纸带上,而计算结果最终也只是简单地放在纸带上。至于最初那些东西是怎么放到纸带上的、最后人们又如何读取纸带上的东西,这个模型压根就不关心,或者说,图灵机根本就没有这个能力 —— 而这就是“输入输出”干的事。打个比较粗糙的比方,图灵机这个模型假设所有的数据都已经放在内存里了,而程序执行的结果也只需要放在内存里。至于怎么把数据读入内存,怎么把结果写到内存以外的地方,已经越出了图灵机这个模型的框架。 因此对于I/O这个问题来说是与FP和imperavite语言无关的事情.FP天生不能带上状态,因此在FP中你要么用imperative的方式来模拟I/O,要么用Monad的方式把impervative的方式再模拟回FP(但是这个模拟仅仅是外观上像而已,但是从数学模型上上已经不是FP),但是即使是如此这并不影响FP与imperavtive同等的计算能力。 |
|
返回顶楼 | |
发表时间:2004-09-19
还没吃午饭。关于图灵机的关注点已经了解了,等着进入新课程。
|
|
返回顶楼 | |