打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
编程语言的基石——Lambda calculus | Keep Writing Codes
康托尔、哥德尔、图灵——永恒的金色对角线(rev#2)
怎样写一个解释器
十四、Python lambda表达式及用法
Python中的函数
python常见单词在手,编程入门不愁
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服