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

转载 2006年05月22日 06:54:00

Good math,bad math是我最近发现的一个博客。作者Mark Chu-Carroll写的一系列关于计算机科学理论的文章深入浅出,通俗易懂,属于茶余饭后绝佳的消遣读物。俺一直想写点介绍lambda caculus的小文章,但看了他的“My Fravorite Calculus: Lambda”后,就打消了这个念头。有这么好的文章,转贴就行了,自己就不用再写不入流的文章。今天先转介绍lamdba calculus的第一部分。先申明一下,俺的翻译在不影响作者原意的基础上(但愿能做到到),有时也插科打诨加点8卦。如果谁觉得文章垃圾,完全因为俺水平有限。原文绝对精彩。另外,俺数学方面的术语止于大一微积分。所以术语用错了,还请多多指正。

在计算机科学尤其是是编程语言领域,我们常用一种算子:Lambda Calculus。逻辑学家也常用Lambda Calculus 来研究计算和离散数学结构的本质。其实当初Alanzo Church(就是丘奇-图灵论点里的那位丘奇老大了)和Stephen Cole Kleene(就是自动机理论里Kleene Star那个Kleene了)推出这个Lambda Calculus,也是为了方便他们做逻辑方面的推理,好证明决定性问题。当然以Church和图灵的天才,没多久他们便证明图灵机和lambda calculus具有等价的计算能力。Church提出Lambda Calculus时就怀疑他的理论能被用在其它地方。事实证明他的确高瞻远瞩。Lambda Calculus在编程的理论和实践两方面都意义深远。做理论和做函数编程的且不说。就算是玩儿脚本语言的老大们,也多半成天和lambda打交道。说来好玩儿,计算机科学理论的发展相当诡异。常常是逻辑学家为了推进逻辑理论提出一个理论,若干年后计算机科学家出于实际需求再“重新发现”一模一样的理论。 比如说现在很多函数编程语言常用的Hindley-Milner类型系统,就是逻辑学家Roger Hindley 于1969年先发现,再由大名鼎鼎的牛人Robin Milner于1978年独立提出。说远了。Lambda Calculus本身有若干显著优点:

  1. 它非常简单。反正比图灵机简单。
  2. 它图灵完备。也就是说,图灵机能完成的计算,Lambda Calculus也能完成。
  3. 它易于读写。这点很重要。简单就是力量。我们不可不记。
  4. 它的语义足够强大,能让我们用它来推理。
  5. 它的计算模型足够强大
  6. 容易创建不同的变种,以便我们探索用不同的方式构建计算或语义时的特性

Lambda Calculus易于读写意义重大。正是这个优点催生了许多或多或少基于lambda calculus的极为优秀的编程语言:Lisp, ML, 和Haskell都在很大程度上基于Lambda calculus开发出来。

Lambda calculus建立在函数这个概念上。纯粹的lambda算子理论中,任何东西都是函数。除了函数外别无它物。不过我们可以用函数搭建出各种东西。其实我们可以从lambda calculus开始,从无到有搭建出整个数学的结构。

牛皮轰轰吧?我们就来看一下lambda calculus为什么这么神奇。对任何一个算子理论来说,我们必须先定义两个东西。一是句法(syntax),用来描述什么表达式是合法的;二是一套规则,用来规定我们怎么对表达式作合法的符号操作。

Lambda Calculus句法

Lambda calculus 只有三种表达式

  1. 函数定义:在lambda calculus里一个函数就是一个表达式,写成lambda x . <函数体>。意思是“一个函数,带一个参数X,返回计算函数体后得到的结果”。这个时候我们说这个lambda表达式绑定了参数X。
  2. 标识符引用(identifier reference): 一个标识符引用就是一个名字。这个名字和包括这个引用的函数定义里的参数同名。
  3. 函数应用(function application): 这个更简单,把要应用的值放到函数定义的后面就行了。比如
    (lambda x . plus x x) y

这么简单的定义能干什么嗫?怎么没有多个参数嗫?这个就是数学的魅力了。我们很快会发现,多个参数可以被等价的操作(所谓的currying)来代替。而配上简单的操作后(本质操作就一个:替换),我们就得到了一门强大的编程语言,不输基于图灵机模型的Algo系列语言,比如C。

欲知后事如何,且听下回分解。

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

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

lambda算子简介1.a

接着前两天的转载继续写。上次说到lambda算子的函数只接受一个参数。那怎么处理多个参数呢?如果只有一个参数,那岂不是连加法都不能实现?这当然难不倒像丘齐这样的天才。于是, lo and behold...
  • g9yuayon
  • g9yuayon
  • 2006年05月29日 08:30
  • 14738

深入理解Lambda

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

lambda算子 1.b

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

C++ STL基础

C++ STL基础                                                                    模板   template.cpp ...
  • liu5320102
  • liu5320102
  • 2016年02月29日 12:42
  • 370

2012百度之星资格赛试题与AC代码

百度文库下载地址:http://wenku.baidu.com/view/39d92648852458fb770b5616.html 2012百度之星资格赛试题与AC代码 A:百度计算器的...
  • Jack_Wong2010
  • Jack_Wong2010
  • 2012年06月02日 09:22
  • 965

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

博客推荐:good math, bad math之Lambda算子简介 分类: 计算机科学 阅读流水帐 翻译2006-05-22 06:54 8928人阅读 评论(2) 收藏 举报 ...
  • zdy0_2004
  • zdy0_2004
  • 2014年10月26日 00:49
  • 546

hdu 1220 Cube 简单数论

Problem Description Cowl is good at solving math problems. One day a friend asked him such a questio...
  • Lionel_D
  • Lionel_D
  • 2015年03月12日 14:27
  • 597

uva 10943How do you add?(简单组合)

Problem A: How do you add? Larry is very bad at math - he usually uses a calculator, which worked...
  • u012860428
  • u012860428
  • 2015年01月27日 09:20
  • 628

Python之Math

函数 说明 实例 math.e 自然常数e >>> math.e2.718281828459045 math.pi 圆周率pi >>> math.pi3.141592653589793 math.de...
  • u011225629
  • u011225629
  • 2017年11月06日 16:09
  • 795
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:博客推荐:good math, bad math之Lambda算子简介
举报原因:
原因补充:

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