负暄琐话

我的email: rot47('649@ 6(hF+`hd"w=92vhG{>}G3"@l M >:>6?4@56 \F')

囧囧ID:g9yuayon
[修改头像]
779378次访问,排名36好友9人,关注者11
g9yuayon的文章
原创 238 篇
翻译 4 篇
转载 48 篇
评论 790 篇
g9的公告
最近评论
alextooter:ff可是用的完全的自己内存管理。。

最近ff3非常好,值得试试看。
fferror:无比期待g9老大的model checking续集。
sprhawk:哈哈,太强了,最近刚听说有Erlang,了解一下。
看一下历史,比看语法有意思得多嘿嘿
lordchl:后面提示下不动点好了,跳得太大
lbaby:Do you mind if I jot down some notes on your chests ??


猛到无以复加
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    旅游
    计算机科学
    Lambda the Ultimate
    软件开发
    Reddit编程专栏(RSS)
    正在读的书
    存档

    转载 博客推荐: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。

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

    发表于 @ 2006年05月22日 06:54:00|评论(loading...)|编辑

    旧一篇: 试一下TB

    评论

    #g9 发表于2006-05-29 08:30:00  IP: 211.100.21.*
    TrackBack来自《lambda算子简介1.a》

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

    Currying
    据说Currying翻译为局部套用函数,也不知真假。喜欢吃印度美食的老大们不要激动。Currying和咖喱没有半点关系。这个技巧以逻辑学家Haskell Curry的姓命名。Haskell Curry也是名动一时的人物。他和Moses...
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © g9