??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久久波多野高潮日日,青青草原一区二区,1024精品久久久久久久久http://www.aygfsteel.com/sizilove/zh-cnWed, 18 Jun 2025 11:34:43 GMTWed, 18 Jun 2025 11:34:43 GMT60lambda演算W记Q{载)http://www.aygfsteel.com/sizilove/archive/2007/07/16/130611.html馒头馒头Mon, 16 Jul 2007 08:43:00 GMThttp://www.aygfsteel.com/sizilove/archive/2007/07/16/130611.htmlhttp://www.aygfsteel.com/sizilove/comments/130611.htmlhttp://www.aygfsteel.com/sizilove/archive/2007/07/16/130611.html#Feedback0http://www.aygfsteel.com/sizilove/comments/commentRss/130611.htmlhttp://www.aygfsteel.com/sizilove/services/trackbacks/130611.html?#955;演算

Lambda演算介:

WikipediaQ维基百U全书)中关?/strong>lambda演算的解释如下:

The lambda calculus is a formal system designed to investigate function definition, function application, and recursion. It was introduced by Alonzo Church and Stephen Cole Kleene in the 1930s; Church used the lambda calculus in 1936 to give a negative answer to the Entscheidungsproblem. The calculus can be used to cleanly define what a computable function is. The question of whether two lambda calculus expressions are equivalent cannot be solved by a general algorithm, and this was the first question, even before the halting problem, for which undecidability could be proved. Lambda calculus has greatly influenced functional programming languages, especially Lisp.

λ演算是一套用于研I?a title=函数 >函数定义、函数应用和递归?a title=形式pȝ >形式pȝ。它?Alonzo Church ?Stephen Cole Kleene ?20 世纪三十q代引入QChurch q用 lambda 演算?1936 q给?判定性问?/font> (Entscheidungsproblem) 的一个否定的{案。这U演可以用来清晰地定义什么是一?a title=可计函?>可计函?/font>。关于两?lambda 演算表达式是否等L命题无法通过一个通用的算法来解决Q这是不可判定性能够证明的头一个问题,甚至q在停机问题之先。Lambda 演算?a title=函數式編E?>函数式编E?/font>有巨大的影响Q特别是Lisp 语言?/p>

同时Q数理逻辑中对?/strong>lambda演算的介l就单得多:

λ-演算可以说是最单、最的一个Ş式系l。它是在二十世纪三十q代?a title="Alonzo Church" >Alonzo Church ?Stephen Cole Kleene发明的。至今,在欧z得Cq泛的发展。可以说Q欧z的计算机科学是?#955;-演算开始的Q而现在仍然是Ƨ洲计算机科学的基础Q首先它是函数式E序理论的基Q而后Q在λ-演算的基上,发展h?#960;-演算?#967;-演算Q成q来的ƈ发程序的理论工具之一Q许多经典的q发E序模型是?#960;-演算为框架的?/p>

Lambda 演算可以被称为最的通用E序设计语言。它包括一条变换规?(变量替换) 和一条函数定义方式,Lambda 演算之通用在于QQ何一个可计算函数都能用这UŞ式来表达和求倹{因而,它是{h?a title=囄?>囄?/font>的。尽如此,Lambda 演算的是变换规则的运用,而非实现它们的具体机器。可以认是一U更接近软g而非g的方式?Lambda演算表达了两个计机计算中最基本的概?#8220;代入”?#8220;|换”?#8220;代入”我们一般理解ؓ函数调用Q或者是用实参代替函C的Ş参;“|换”我们一般理解ؓ变量换名规则。后面会讲到Q?#8220;代入”是用lambda演算中的β-归约概念。?#8220;替换”是lambda演算中的α-变换?/p>

目录

  • 1 历史
  • 2 非Ş式化的描q?
  • 3 形式化的定义
    • 3.1字母?
    • 3.2 λ-?
    • 3.3 公式
    • 3.4 λ-中的变量自由出现法?
    • 3.5 λ x的控制域
  • 4 变换与等价关p?
    • 4.1 α-变换
    • 4.2 β-归约
    • 4.3 {h关系
    • 4.4 η-变换
  • 5 λ演算的操作语?
  • 6 λ演算的公理化和定?
    • 6.1 λ演算的公?a >
    • 6.2 不动点理?
    • 6.3 Church-Rosser定理及其{h定理
  • 7 lambda 演算中的E序设计
    • 7.1 自然Cq算
    • 7.2 逻辑与断a
    • 7.3 递归
  • 8 参考文献和外部链接

1 历史

最开始,Church 试图创制一套完整的形式pȝ作ؓ数学的基Q当他发现这个系l易?a title=|素悖论 >|素悖论的媄响时Q就?lambda 演算单独分离出来Q用于研I?a title=可计?>可计?/font>Q最l导致了他对判定性问?/font>的否定回{?/p>

2 非Ş式化的描q?/h2>

?lambda 演算中,每个表达式都代表一个只有单独参数的函数Q这个函数的参数本n也是一个只有单一参数的函敎ͼ同时Q函数的值是又一个只有单一参数的函数。函数是通过 lambda 表达式匿名地定义的,q个表达式说明了此函数将对其参数q行什么操作。例如,“?2”函数 f(x) = x + 2 可以?lambda 演算表示?λ x. x + 2 (λ y. y + 2 也是一LQ参数的取名无关紧要) ?f(3) 的值可以写?(λ x. x + 2) 3。函数的作用 (application) ?a title=左结?>左结?/font>的:f x y = (f x) y。考虑q么一个函敎ͼ它把一个函C为参敎ͼq个函数被作用?3 上:λ f. f 3。如果把q个 (用函C参数? 函数作用于我们先前的“?2”函数上:(λ f. f 3) (λ x. x+2)Q则明显圎ͼ下述三个表达式:

f. f 3) (λ x. x+2)   ?   (λ x. x + 2) 3    ?   3 + 2

是等L。有两个参数的函数可以通过 lambda 演算q么表达Q一个单一参数的函数的q回值又是一个单一参数的函?(参见 Currying)。例如,函数 f(x, y) = x - y 可以写作 λ x. λ y. x - y。下qC个表辑ּQ?/p>

x. λ y. x - y) 7 2    ?   (λ y. 7 - y) 2    ?   7 - 2

也是{h的。然而这U?lambda 表达式之间的{h性无法找C个通用的函数来判定?/p>

q所有的 lambda 表达式都可以规约至上q那L定|考虑

x. x x) (λ x. x x)

?/p>

x. x x x) (λ x. x x x)

然后试图把第一个函C用在它的参数上?(λ x. x x) 被称?ω l合?/font>Q?(λ x. x x) (λ x. x x)) 被称?ΩQ?((λ x. x x x) (λ x. x x x)) 被称?Ω2Q以此类推?/p>

若仅形式化函C用的概念而不允许 lambda 表达式,得Cl合子逻辑?/p>

3 形式化的定义

3.1字母?/h3>

lambda演算pȝ中合法的字符如下Q?/p>

1.    标识W?(identifier) ?a title=可数无穷 >可数无穷集合Q{ x1Qx2Qx3Q?#8230;}变元Q变元的数量是无ILQ不能在有限步骤内穷举,q个很重要,后面有定理是Ҏq一点证明的Q?/p>

2.    à 归约

3.     {h

4.    λQ(Q)  Q辅助工LP一共有三个Q?#955;和左括号xP

    所有能够在lambda演算pȝ中出现的合法W号只有以上四种Q其他符号都是非法的。例?#955;x.x+2Q如果没有其他对于+W号的说明,那么q就是一个非法的λ演算表达式?/font>

3.2 λ-?/h2>

λ-在一些文章中也称?#955;表达式(lambda expressionQ,它是׃面字母表中的合法字符l成的表辑ּQ合法的表达式组成规则如下:

1.   M个变元是一个项

2.   若MQN是项Q则QMNQ也是一个项  Qfunction applicationQ函数应用)

3.   若M是一个项Q而x是一个变元,则(λx.MQ也是一个项  Qfunction abstractionQ函数抽象)

4.   仅仅׃上规则归U_义得到的W号串是?/p>

则所有的 lambda 表达式可以通过下述?BNF 范式表达?a title=上下文无x?>上下文无x?/font>描述Q?/p>

  1. <expr> ::= <identifier>
  2. <expr> ::= (λ <identifier> . <expr>)
  3. <expr> ::= (<expr> <expr>)

说明1Q通常Qlambda 抽象 (规则 2) 和函C?(规则 3) 中的括号在不会生歧义的情况下可以省略。如下假定保证了不会产生歧义Q?/p>

(1) 函数的作用是左结合的?/p>

 (2) lambda 操作W被l定到它后面的整个表辑ּ?/p>

例如Q表辑ּ ((λ x. (x x)) (λ y. y)) 可以写成 (λ x. x x) λ y.y?/p>

说明2Q?λx.M)q样?#955;-被UCؓ函数抽象Q原因是它常常就是一个函数的定义Q函数的参数是变量xQ函C是MQ而函数名U则是匿名的。用一个不恰当的比L_我们通常认ؓ的函数f(x)=x+2Q可以被表达?#955;x.x+2。因为+是未定义的,所以这个比d是ؓ了方便理解而已?/p>

说明3QMNq样?#955;-被UCؓ函数应用Q原因是它表达了Mq个函数应用到Nq个概念。沿用上面的例子f(x)=x+2Q那么f(2)=2+2Q同Lλx.x+2表达了f(x)的概念,那么Q?#955;x.x+2Q?表达了f(2)的概c其中MQ?#955;x.x+2QNQ?Q所以MNQ(λx.x+2Q??/p>

说明4Q注意说?只是Z方便理解Q但是还存在很多与直观理解不W合的地斏V例如xy也是一个合法的λ-,它们也是MN形式的,不过x和y都仅仅是一个变量而已Q谈不上函数代入?/p>

说明4Q这里的另一隄是要区分变量和元变量,如:MQ?#955;x.xQ这里x为变量,是我们在语法pȝ中定义了的,而M为元变量Q没有在语法pȝ中定义,是我们用来表C的助记W。我们必L据上下文来区分谁是变量,谁是元变量?/p>

上面?#955;-的形式化定义,有一些是可以与函数理论直观联pȝQ而另一些只是说明这?#955;-Ҏ合法的,不一定有直观的字面意义?/p>

3.3 公式

若MQN?#955;-,则MàNQM N是公式?/p>

3.4 λ-中的变量自由出现法?/h2>

cM λ x. (x y) q样?lambda 表达式ƈ未定义一个函敎ͼ因ؓ变量 y 的出现是自由的,卛_q没有被l定到表辑ּ中的M一?λ 上。在一?#955;-中Q变量要么是自由出现的,要么是被一?#955;W号l定的。还是以函数的方式来理解变量的自由出现和l定。例如f(x)=xyq个函数Q我们知道x是和函数f相关的,因ؓ它是f的Ş参,而y则是和f无关的。那么在λx.xyq个λ-中Qx是?#955;l定的,而y则是自由出现的变量?/p>

直观的理解,被绑定的变量是作ؓ某个函数形参的变量,而自由变量则是不作ؓM函数形参的变量?/p>

Lambda变量l定规则Q?/p>

1.   在表辑ּx中,如果x本n是一个变量,那么x是一个单独的自由出现?/p>

2.   在表辑ּλ x. E中,自由出现是E中所有的除了x的自由出现。这U情况下在E中所有x的出现都UCؓ被表辑ּ中x前面的那?#955;所l定?/p>

3.   在表辑ּ(MN )中,变量的自由出现就是M和N中所有变量的自由出现?/p>

另一U关于变量的自由出现的规则也许更直接Q?/p>

1.   free(x) = x

2.   free(MN) = free(M) 萛\nfree(N)

3.   free(lx " M) = free(M) – {x}

Z么要花大力气来给出变量自由出现的规则Q是因ؓ后面的很多地方要用到变量的自由出现的概念。例?#945;-变换?#946;-归约?/p>

例子Q分?#955;f.λx.fx中变量的自由出现和绑定状c?/p>

λf.λx.fx =λf.E, E=λx.fx

E=λx.A, A=A1A2, A1=f, A2=x

所以在A中f和x都是自由出现的,

所以E中x是绑?#955; x

所以整个公式中f是绑定第一?#955; f的?/p>

一个不含自由变量的称为封闭项Q封闭项也称为组合子。最单的l合子,UCؓ恒等函数Qid=λx.x

3.5 λ x的控制域

来看两个λ-,λx.xx?#955;x.(xx)有何不同Q根据左l合的法则,λx.xxQ?λx.x)xQ其中第一个x是被λl定的,而第二个x则是自由出现的。?#955;x.(xx)中两个x都是?#955;l定的。这表明了两?#955;-中λx的控制域是不同的?/p>

我们知道谓词演算中量词也是有控制域的Q?#955;x的控制域与它们类|q里׃l出详细的定义了。其实也很直观?br>
 

4 变换与等价关p?/u>

4.1 α-变换

α-变换规则表达的是Q被l定变量的名U是不重要的。比如说 λx.xy.y 是同一个函数。因此,某个函C的所有约束变量全部换名是可以的。尽如此,q条规则q像它看v来这么简单,关于被绑定的变量能否由另一个替换有一pd的限刉要遵循?/p>

首先是一个说明:如果MQN?#955;-,x在M中有自由出现Q若以N|换M中所有x的自由出玎ͼM中可能含有x的约束出玎ͼQ我们得到另一?#955;-,CؓM[x/N]?/p>

α-变换规则如下Q?/p>

λx.M?#955;y.M[x/y]  如果y没有在M中自由出玎ͼq且只要y替换M中的xQ都不会被M中的一?#955;l定。即Q替换的变元不能在M中自由出玎ͼq且也只替换M中的自由变元

q条规则告诉我们Q例?λ x. (λ x. x) x q样的表辑ּ?λ y. (λ x. x) y 是一L?/p>

注意QM[x/N]定义出来只是一U记P它不{于α-变换。既MQ≌ M[x/y]

例子Q?#955;x.( λx.x)x?#955;y.(λx.x)y  但是 ( λx.x)xQ≌(λx.x)y

α-变换主要用来表达函数中的变量换名规则Q需要注意的是被换名的只能是MQ函CQ中变量的自由出现?/p>

4.2 β-归约

β-归约表达的是函数应用或者函C入的概念。前面提到MN是合法的λ-,那么MN的含义是M应用到NQ通俗的说是将N作ؓ实参代替M中的U束变量Q也是形参?#946;-归约的规则如下:

(λx.M)N à M[x/N] 如果N中所有变量的自由出现都在M[x/N]中保持自由出?/p>

注意Q?(lx. ly.(y x))y ?ly.(y y)是错的,应ؓy在ly.(y x)中不自由出现Q这时要归约应该先?#945;-变换把ly.(y x)中的y换成其他变元

β-归约?#955;演算中最重要的概念和规则Q它是函C入这个概늚形式化表C?/p>

一些例子如下:

(lx.ly.y x)(lz.u) ?ly.y(lz.u)

(lx. x x)(lz.u) ?(lz.u) (lz.u)

(ly.y a)((lx. x)(lz.(lu.u) z)) ?(ly.y a)(lz.(lu.u) z)

(ly.y a)((lx. x)(lz.(lu.u) z)) ?(ly.y a)((lx. x)(lz. z))

(ly.y a)((lx. x)(lz.(lu.u) z)) ?((lx. x)(lz.(lu.u) z)) a

需要多加练习才能习惯这U归U?/p>

4.3 {h关系

?lambda 表达式的集合上定义了一?a title={h关系 >{h关系 (在此? 标注)Q?#8220;两个表达式其实表C的是同一个函?#8221;q样的直觉性判断即由此表述Q这U等价关pL通过所谓的“alpha-变换规则”?#8220;beta-归约规则”得到的?/p>

f g:当且仅当Q?Qg≌f ;(2)g?or f?;(3)存在hQf h且h g之一成立?/p>

 关系被定义ؓ满上述规则的最等价关p?(卛_q个{h关系中减MQ何一个映,它将不再是一个等价关p??/p>

4.4 η-变换

前两条规则之后,q可以加入第三条规则Q?#951;-变换Q来形成一个新的等价关pR?#951;-变换表达的是外g?/font>的概念,在这里外延性指的是Q两个函数对于所有的参数得到的结果都一_当且仅当它们是同一个函数?/p>

η-变换Q?#955; x . f x  fQ只?x 不是 f 中的自由出现?/p>

f ?g 外g的等P对Q意lambda 表达?aQ如果有f a  g a成立Q则f  g也成立?/p>

下面说明了ؓ何这条规则和外g性是{h的:Q即?#951;-变换可以证明外g{hQ相反由外g{h也可以证?#951;-变换Q?/p>

f a  g a Ҏ有的 lambda 表达?a 成立Q则当取 a 为在 f 中不是自由出现的变量 x Ӟ我们?f x  g xQ因?λ x . f x  λ x . g xQ由 η-变换 f  g。所以只?η-变换是有效的Q会得到外g性也是有效的?/p>

相反圎ͼ若外延性是有效的,则由β-归约Q对所有的 y ?(λ x . f x) y  f yQ可?λ x . f x  fQ即 η-变换也是有效?/p>

5 λ演算的操作语?/u>

如果一?#955;-M中不含有M形ؓ((λx.N1)N2)的子,则称M是一个范式,Cؓn.f.。如果一?#955;-M通过有穷?#946;-归约后,得到一个范式,则称M有n.f.Q没有n.f.?#955;-称为n.n.f.?/p>

    通俗的说法是Q将一?#955;-进?#946;-归约Q也是q行实参代入形参的过E,如果通过有穷步代入,可以得到一个不能够再进行代入的λ-,那么q就是它的范式。如果无论怎样代入Qd在可以l代入的子项Q那么它没有范式?/p>

例子

M = λx.(x((λy.y)x))yQ则Mà y((λy.y)y) à yy。M有一个n.f.?/p>

例子

M =λx.(xx) λx.(xx)Q则Màλx.(xx) λx.(xx)=M。注意到M的归U只有唯一的一个可能\径,所以M不可能归U到n.f.。所以M是n.n.f.?/p>

注意q个λx.(xx) λx.(xx)?#955;演算的协调性研I中是一个比较经典的V?(λ x. x x) (λ x. x x))被称?#937;, ((λ x. x x x) (λ x. x x x))被称?Ω2?/p>

一般的把一?#955;-规Uؓ范式的过E称为求|范式也叫做倹{在《类型和E序设计语言》一书中Q作者给Zλ-演算中的几种不同的求值策略。每个策略确定一个项在下一步求gȀzd一个约式或几个U式?/p>

注意到在求值的q程中是左结合,q且当且仅当左边以是g才能对右边的进一步求?nbsp;     

6 λ演算的公理化和定?/u>

6.1 λ演算的公?/h2>

q一D|自《数理逻辑与集合论》(W二?清华大学出版C)?/p>

1.         (λx.M)N à M[x/N] 如果N中所有变量的自由出现都在M[x/N]中保持自由出?/p>

2.         MàM

3.         MàN, NàL => MàL 

4.         MàM’=>ZMàZM’

5.         MàM’=>MZàM’Z

6.         MàM’=>λx. M àλx. M’

7.         MàM’=>M M’ 

8.       M M’=>M’ M

9.         M N,N L=>M L

10.     M M’ => ZM  ZM’

11.     M M’ => MZ  M’Z

12.     M M’ =>λx. M λx. M’

13QM≌N => MàN 如果y没有在M中自由出玎ͼq且只要y替换M中的xQ都不会被M中的一?#955;l定?/p>

如果某一公式MàN或者M N可以用以上的公理推出Q则Cؓλ├MàN?#955;├M N?/p>

规则13可以加也可以不要Q要了表C是考虑α-变换的系l?/p>

6.2 不动点理?/h2>

Λ表示所有的λ-组成的集合?/p>

定理Q对于每一个F∈ΛQ存在M∈ΛQ?#955;├FM=M?/p>

证明Q定义wQ?#955;x.F(xx)Q又令MQwwQ则?#955;├MQwwQ?λx.F(xx))wQF(ww)=FM?/p>

证明是非常y妙的Q对于每个FQ构造出的这个ww刚好是可以通过一?#946;-归约得到F(ww)QFMQ如果再归约一ơ就得到F(FM)Q这样可以无限次的归U下d到F(F(F(F…(FM)…)))?/p>

6.3 Church-Rosser定理及其{h定理

q两个定理告诉我们这样一个事实:如果M有一个n.f.Q则q个n.f.是唯一的,Mβ-归约的\径都终止,q且l止到这个n.f.?/p>

Church-Rosser定理Q如?#955;├M NQ则Ҏ一个ZQ?#955;├MàZq且λ├NàZ?/p>

与之{h的定理如下,

Diamond Property定理Q如果MàN1,MàN2Q则存在某一ZQ得N1àZQN2àZ。(规约的合性)

推论QMàN1,MàN2 且N1,N2都是范式 则N1≌N2 (范式?#945;-变换下的唯一?

 关系被定义ؓ满上述两条规则的最等价关p?(卛_q个{h关系中减MQ何一个映,它将不再是一个等价关p??/p>

对上q等价关pȝ一个更h作性的定义可以q样获得Q只允许从左臛_来应用规则。不允许M beta 归约?lambda 表达式被UCؓ范式。ƈ非所有的 lambda 表达式都存在与之{h的范式,若存在,则对于相同的形式参数命名而言是唯一的。此外,有一个算法用来计范式,不断地把最左边的Ş式参数替换ؓ实际参数Q直到无法再作Q何可能的规约为止。这个算法当且仅?lambda 表达式存在一个范式时才会停止?a title="Church-Rosser 定理" >Church-Rosser 定理 说明了,当且仅当两个表达式等hQ它们会在Ş式参数换名后得到同一个范式?/p>

7 lambda 演算中的E序设计

7.1 自然Cq算

?lambda 演算中有许多方式都可以定?a title=自然?>自然?/font>Q但最常见的还?a title=邱奇?>邱奇?/font>Q下面是它们的定义:

0 = λ s. λ z. z

1 =λ s. λ z.. s z

2 =λ s. λ z. s (s z)

3 =λ s. λ z. s (s (s z))

以此cL。直观地_lambda 演算中的数字 n 是一个把函数 f 作ؓ参数q以 f ?n ơ幂回值的函数。换句话_Church 整数是一?a title=高阶函数 >高阶函数 -- 以单一参数函数 f 为参敎ͼq回另一个单一参数的函数?/p>

(注意?Church 原来?lambda 演算中,lambda 表达式的形式参数在函C中至出Cơ,q得我们无法像上面那样定义 0) ?Church 整数定义的基上,我们可以定义一个后l函敎ͼ它以 n 为参敎ͼq回 n + 1Q?/p>

SUCC1 = λ n. λ s. λ z. s(n s z)

SUCC2 =  λ n. λ s. λ z. n s(s z)

加法是这样定义的Q?/p>

PLUS = λ m. λ n. λ s. λ z. m s (n s z)

PLUS 可以被看作以两个自然Cؓ参数的函敎ͼ它返回的也是一个自然数。你可以试验?/p>

PLUS 2 3    ?   5

是否{h。乘法可以这样定义:

MULT = λ m. λ n. m (PLUS n) 0,

MULT2 =λ m. λ n. λ s. λ z. m (n s) z

?m 乘以 n {于在零的基?n ơ加 m。更z的一U方式是

MULT3 = λ m. λ n. λ s. m (n s)

q的定义Q?/p>

       POWER1 = λ m. λ n. m (MULT n) 1

       POWER2 = λ m. λ n. m n  (可能有点问题Q我验证了好象不正确)

正整?n 的前驱元 (predecessesor) PRED n = n - 1 要复杂一些:

PRED = λ n. λ f. λ x. ng. λ h. h (g f)) (λ u. x) (λ u. u)

或?/p>

PRED = λ n. ng. λ k. (g 1) (λ u. PLUS (g k) 1) k) (λ l. 0) 0

注意 (g 1) (λ u. PLUS (g k) 1) k 表示的是Q当 g(1) 是零Ӟ表达式的值是 kQ否则是 g(k) + 1?/p>

   在《类型和E序设计语言》一书中作者对于数和各U运的~码描述得比较清晎ͼ强烈看以下,q且作者还介绍了直接基于原始的布尔cd和数型的pȝQ简UCؓλNBQƈl出了这两套pȝ之间的{换?/p>

7.2 逻辑与断a

习惯上,下述两个定义 (UCؓ Church 布尔? 被用?TRUE ?FALSE q样的布|

tru = λ u. λ v. u

fls = λ u. λ v. v

q样我们可以定义一个组合式test=λl.λm.λ n.lmnQ得b为truӞtest b v w规约为vQ而当b为flsӞtest b v w规约为w?/p>

q且我们q可以定义逻辑q接词:

and = λb. λc. b c fls

or =λb. λc. b c tru

not =λb. b fls tru

断言是指q回布尔值的函数。最基本的一个断a ISZEROQ当且仅当其参数为零时返回真Q?/p>

ISZERO = λ n. nx. fls) tru

断言的运用与上述 TRUE ?FALSE 的定义,使得 "if-then-else" q类语句很容易用 lambda 演算写出?/p>

7.3 递归  

递归是一U以函数自nq代自n变元的算法,一般是通过函数自n来定义函数的方式实现。表面看?lambda 演算不允讔R归Q其实这是一U对递归的误解。考虑阶乘函数 f(n) 一般这样递归地定义:

f(n) = 1, ?n = 0; n·f(n-1), ?n>0.

λ语言Q?/p>

FACT = λ n. nu. MULT n (FACT (PRED n))) 1

?Y-l合??λ语言 中合法地定义Q?/p>

FACT = Y (λ g. λ n. nu. MULT n (g (PRED n))) 1)

Y = λ f. ((λ x. f (x x)) (λ x. f (x x)))

q一节我也没分析透彻Q只能原本引用,q且以上的内容也只能当作一个不严格的了解,暂时q不知道其有没有错,不过一点可以肯定的是上面定义的Y-l合子只能用于按名调用的情况Q在按D用的形式中是无用的,因ؓ对Q何gQ表辑ּYg发散。想要深入理解还是参看一下《类型和E序设计语言》这本书Q不q书中也没深入的具体分析按值和按名调用的作用方式。其实这涉及C同的操作语义的定义。想要在q里弄透还得找找论文看看?/p>

8 参考文献和外部q接



馒头 2007-07-16 16:43 发表评论
]]> վ֩ģ壺 ®| | ܱ| | ˳| | | ˫| | | ޽| | | SHOW| Ӷ| | ʯɽ| ¡| | ˳| ɽ| Ĭ| »| ؼ| ɽʡ| ɽ| տ| | | ղ| | ԣ| ƽ| | | ų| | ¤| | Ʊ| |