Church计数和Lambda演算
在SICP的练习2.6 提到了Church计数,也就是将数据和操作引入Lambda演算,告诉我们,一旦拥有Lambda,别无所求。这些搞数学的家伙总是喜欢把可以不要的东西全全都去掉,然后用2.6这样的习题中表现出来的能力彻底雷到我。所以像我一样数学只有半桶水的同学先看看维基总是比较好:( http://en.wikipedia.org/wiki/Lambda_calculus )
Wiki:
lambda演算,也称为λ-演算,作为一个形式定义系统去研究函数定义、实现、递归。也是Lisp这类语言计算模型。
定义
一个Lambda 表达式应该由以下的东东构成
变量: v1, v2, . . .
符号:λ 和 .
括号组:( 和 )
一个合法的Lambda 表达式<expression>可以按照如下递归定义:
<expression> = <variable> | <function> | <application>
<function> = λ <variable>.<expression>
<application> = (<expression> <expression>)
Lambda表达式记号法
对于Lambda表达式M和N,
最外层括号可以省略: (M N) 可以表示成 M N.
(λx. M)这样的表达式 被称为函数抽象,原因是它常常就是一个函数的定义,函数的参数就是变量x,函数体就是M,而函数名称则是匿名的。你可以认为它就是f(x)=M,匿名就意味这函数名’f’是不存在的,存在的仅仅是x映射到M这个过程。
函数应用采用左结合: M N P 表示 (M N) P.
Lambda表达式在记法上使用贪婪扩展: 也就是说 λ x. M N 表示 (λ x.M N) ,而不是(λ x. [...]