lambda算子简介1.a

翻译 2006年05月29日 08:30:00

接着前两天的转载继续写。上次说到lambda算子的函数只接受一个参数。那怎么处理多个参数呢?如果只有一个参数,那岂不是连加法都不能实现?这当然难不倒像丘齐这样的天才。于是, lo and behold,  一个我们至今在编程里常用的技巧粉墨登场:

Currying

据说Currying翻译为局部套用函数,也不知真假。喜欢吃印度美食的老大们不要激动。Currying和咖喱没有半点关系。这个技巧以逻辑学家Haskell Curry的姓命名。Haskell Curry也是名动一时的人物。他和Moses Schönfinkel 共创了组合逻辑(combinatory logic),并把这们学科发扬光大。当初Curry搞出组合逻辑,主要是为了在数理逻辑里避免使用变量。后来搞函数编程的人们发现,组合逻辑是一类函数编程语言的理论基础。一些函数语言里常见的特性,比如说高阶函数合lazy evaluation, 就是用组合逻辑里的combinator实现的。当初Alanzo Church对这个理论也相当熟悉。难说lambda理论不是受了组合逻辑的影响。大牛Philip Wadler为了纪念Curry, 把他的函数语言叫做Haskell。Haskell也是一门巨酷的函数语言,兼顾数学的优美和软件开发的实用性。连LInspire的开发组都决定用Haskell作为系统开发的语言(但我很奇怪他们为什么放弃使用另一门酷酷的函数语言Ocaml)。说远了。

解决参数限制的关键在于认识到函数也是数据(用更严格的说法,是值)。既然是数据,就可以传来传去。如果有两个参数,我们可以写一个接受第一个参数的函数,而这个函数返回的是接受第二个参数的函数。“就那么简单!我们在JavaScript里不是常用这个功能?” 嘻嘻,我们在JavaScript里的确常用这个功能。JavaScript其实是带C句法的函数语言,支持高阶函数,自然支持Currying。JavaScript的功能其实颇为强大,不然Douglas Crockford不会说JavaScript是最被人误解的语言

举例来说,假设我们要写一个函数,把x和y相加。最自然的写法是lambda x y . plus x y.  既然我们只能一次接受一个参数,我们可以先写一个接受 x 的函数。这个函数返回一个接受 y 的函数。这个被返回的函数把 x 和 y 相加:lambda x.(lambda y. plus x y)。简单吧?数学奇妙之处就在于我们用极为简单的砖块搭建出恢弘的宫殿。事实上,数学家们总是极力追求理论基础的简洁。他们不知疲倦地挥舞着奥卡姆剃刀,直到把自己的理论切割成东家之子:增之一分则太长,减之一分则太短。有了Currying这个工具,我们可以放心使用多参数的标记了。反正多参数的lambda不过是单参数lambda的方便用法而已,没有任何实质上的改变。

(待续。累死了。什么时候才能写到让人拍案叫绝的Y Combinator啊? )

lambda算子3:阿隆佐.丘齐(Alonzo Church)的天才

lambda算子3阿隆佐.丘齐(Alonzo Church)的天才:Lambda算子里的数前面建立了lambda运算的基本规则,就可以用lambda算子做点有意思的东西了。开始前为方便计,我们先来点语...
  • g9yuayon
  • g9yuayon
  • 2006年08月14日 14:45
  • 12355

Python 下的 lambda 算子

1. 允许缺省>> a = lambda x, y=2: x+y >> a(0) 2
  • lanchunhui
  • lanchunhui
  • 2016年08月02日 19:33
  • 581

lambda算子 1.b

上上周就快写完这篇时,IE突然当掉,写的东西烟消云散。俺也元气大伤。这次吸取教训,不用CSDN的在线工具写了。这样的坏处是把文章拷贝到CSDN时,格式难免出错,还得手工调整一下。CSDN什么时候可以实...
  • g9yuayon
  • g9yuayon
  • 2006年06月12日 11:14
  • 10909

深入理解Lambda

概述   Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。下面就来说说L...
  • u013761665
  • u013761665
  • 2016年03月10日 17:18
  • 23874

MIT的HoG算子可视化:Inverting and Visualizing Features for Object Detection

转自: http://www.bfcat.com/index.php/2012/12/inverting-visualizing-features-object-detection/ 所有人都...
  • hwb506
  • hwb506
  • 2014年03月18日 22:18
  • 1093

算子

在信号处理、图像处理中有很多的算子说法。我一直很好奇,到底是什么意思呢? 在物理学里,算符(operator),又称算子,作用于物理系统的状态空间,使得物理系统从某种状态变换为另外一种状态。这变...
  • guanglizI
  • guanglizI
  • 2013年03月23日 15:04
  • 573

lambda算子3:阿隆佐.丘齐(Alonzo Church)的天才

lambda算子3阿隆佐.丘齐(Alonzo Church)的天才:Lambda算子里的数前面建立了lambda运算的基本规则,就可以用lambda算子做点有意思的东西了。开始前为方便计,我们先来点语...
  • g9yuayon
  • g9yuayon
  • 2006年08月14日 14:47
  • 6210

图像处理常用边缘检测算子总结

不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界...
  • Augusdi
  • Augusdi
  • 2013年06月05日 10:20
  • 80856

博客推荐:good math, bad math之Lambda算子简介

Good math,bad math是我最近发现的一个博客。作者Mark Chu-Carroll写的一系列关于计算机科学理论的文章深入浅出,通俗易懂,属于茶余饭后绝佳的消遣读物。俺一直想写点介绍lam...
  • g9yuayon
  • g9yuayon
  • 2006年05月22日 06:54
  • 13634

Lambda Calculus (翻译)

原文出处:http://en.wikipedia.org/wiki/Lambda_calculus Lambda演算 From Wikipedia, the free encyclopedia...
  • DinoSantiago
  • DinoSantiago
  • 2004年07月02日 10:27
  • 2572
收藏助手
不良信息举报
您举报文章:lambda算子简介1.a
举报原因:
原因补充:

(最多只允许输入30个字)