[研究笔记]Lambda表达式学习笔记

最近正好用到,就稍微做一下学习笔记。全部经过自己理解的归纳总结,坚持更新。

Lambda表达式强大到和图灵机等价,而且极其简洁、优美,太好玩了!

====

Formal Defination

Lambda表达式的语法非常简单。Lambda表达式包含3类字符,标示符i,抽象记号λ,以及左右括号(),其中i∈I,I为标示符集合:I={a,b,c,...,x,y,z,...,etc}。Lambda表达式集合L定义如下:

1. i∈L。

2. 若e∈L,则(λi.e)∈L。

3. 若x, y∈L,则(x y)∈L。

BNF下表示为:

1. <expr> ::= <identifier>

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

3. <expr> ::= (<expr> <expr>)

规则2被称为lambda抽象,规则3被称为函数作用。(为什么这么叫请看下文)

当然,形式化定义很难看懂,那么看看非形式化的定义。

 

Informal Defination

我的理解是这样的。Lambda表达式是这样一种函数:

1. 它接受一个单独的参数(输入)。这个单独的参数(输入)是一个lambda表达式。

2. 它的表达式说明了它对这个唯一的输入进行了某种操作。

3. 它的值(输出)是一个lambda表达式。

请看以下例子。

 

Examples

比如自增函数 f(x) = x+1 用lambda表达式可以写成(λx.x + 1)(注意,+号和加法在lambda演算中也是被事先定义的,具体可以参见wikipedia,若未被事先定义则该表达式不合法,这里为了方便就略去+号定义)。当然也可以写成(λy.y + 1)(虽然在这里变量名无关紧要,但是lambda演算的变量代换规则是很严格的,具体可以参见wikipedia)。这就相当于用lambda表达式定义了一个匿名函数(当然也可以显式写作INC = (λx.x + 1)),这就是规则2 lambda抽象

f(2)的值可以写作((λx.x + 1) 2),读作“将 +1操作 作用于 2 上”。这就是规则3 lambda函数作用。注意lambda函数作用是左结合的,即f x y = (f x) y。

这就是lambda表达式最基本的形式。下面来看一些复杂的例子。

1. (λf.f 2)是这样一个函数,它接受一个lambda表达式作为参数,并将该表达式作用于2上。那么以下几个表达式等价:

(λf.f 2)(λx.x + 1) 等价于 ((λx.x + 1) 2) 等价于 1 + 2

2. 有两个或更多参数的函数可以通过lambda表达式可以通过Currying(也称partial evaluation)这么表达,比如f(x, y) = x + y,写作(λx.λy.x + y)(byvoid的讲稿中写作(λx y.x + y),我不知道这种表达方式是否正规,还是在不引起歧义的情况下可以这么写)。那么以下几个表达式等价:

(λx.λy.x + y) 1 2 等价于 (λy.1 + y) 2 等价于 1 + 2

有意思的是,Alonzo Church(lambda表达式发明者之一)证明了不存在一个通用算法来判定任意两个lambda表达式是否等价(lambda表达式这种语言是不可判定的)。这是第一个不可判定性问题,甚至还在图灵机和那个著名的停机问题之前。当然,后来lambda表达式被证明和图灵机等价。

转载于:https://www.cnblogs.com/jffifa/archive/2012/05/13/lambda.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值