lamda运算学习笔记

lamda运算学习笔记lamda->Llamda演算至少从表面上看,有着这样一种企图:将所有运算操作,以及自然数都抽象成“函数”(再一次见识到函数这个概念的伟大)。下面简单的介绍下lamda演算。lamda演算的原始定义看起来比较无聊:(Lx.[fx])a=fa上式用熟悉的概念翻译,就是自变量为x的函数f(x),代入x=a,得f(a)但是这里有

大家好,又见面了,我是你们的朋友全栈君。

lamda -> L

lamda演算至少从表面上看,有着这样一种企图:
将所有运算操作,以及自然数都抽象成“函数”(再一次见识到函数这个概念的伟大)。下面简单的介绍下lamda演算

lamda演算的原始定义看起来比较无聊:

(Lx. [fx]) a = fa

上式用熟悉的概念翻译,就是自变量为x的函数f(x),代入x=a,得f(a)

但是这里有一个扩展:不仅f本身是函数,而且x和a也是函数!而且f也可以作为自变量,即

(Lf. [fx]) g = gx

至此,可以看出,“L”后面至“.”前面的符号其实就是自变量

接下来我们可以看看如何用这种定义表示自然数:

考虑复合函数的表示:

(Lf. [f(fx)]) g = g(gx)

如果做的更彻底一些,把x也当做自变量(没错,这就是二元函数的表示):

Lf. [Lx. [f(fx)]]

将上式缩写为

Lfx. [f(fx)]

并且将“2”的“函数”表达形式,定义为:

2 = Lfx. [f(fx)] (此时,”2″是一个函数而不仅仅是一个数字)

于是,我们有这么一个结论:2重复合函数表示“2”

类似地,我们得到其他自然数的定义:

3 = Lfx. [f(f(fx))]

4 = Lfx. [f(f(f(fx)))]

1 = Lfx. [fx]

0 = Lfx. [x]

… …

接下来,lamda演算的神奇之处在此展开:

考虑函数S = Labc. [b((ab)c)] 的用处,将3代入函数:

S 3 

= Labc. [b((ab)c)] 3

= Lbc. [b((3 b)c)] (实际上即代入a = 3)

= Lbc. [b(b(b(bc)))]

= 4

可见,S的作用就是“+1”操作

上述函数S的神奇之处在于,运用完全抽象的函数运算,取代具体的算术运算。

【写于2012年11月】


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138797.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • go语言goquery下载图片实例「建议收藏」

    crawl.gopackagemainimport(“fmt””strings””strconv””net/http””net/url””io/ioutil””os””log””runtime””flag””github.com/PuerkitoBio/goquery”)constH

    2022年4月9日
  • Java的invoke方法[通俗易懂]

    Java的invoke方法[通俗易懂]如果读一些Java或者相关框架的源码,实际上一定会经常出现invoke方法的调用,在自己或者团队封装框架时,如果有时候弄得不好经常也会报invoke相关的错。invoke方法是干什么的?有什么具体用途?首先要了解invoke方法干什么的以及具体用途,实际你要搞清他在源码那个class文件上,他在那个包里,追根溯源。invoke方法来自Method类,可能不会像我们经常用到的基础类型包装类,以及集合类还有他们的扩展和工具类使用的那么多。但是Method类所在的包可是大名鼎鼎的反射Reflact,不是有

    2022年6月7日
  • Lync Server 2013 标准版部署(四)前端拓扑发布

    Lync Server 2013 标准版部署(四)前端拓扑发布

    2021年5月27日
  • js字符串拼接的几种方式是_js字符串常用方法

    js字符串拼接的几种方式是_js字符串常用方法在JavaScript中,使用字符串连接有几种方式:连接符(+)、反引号(`)、join()、concat()。

    2022年10月24日
  • Maven环境的搭建[通俗易懂]

    Maven环境的搭建[通俗易懂]前言:项目需要的外jar包的时候,这时候建立一个普通的web项目是一个比较头痛的事,它需要新建web项目,配置好tomcat(8.0),然后手动复制所需jar到lib下面然后addbuildpath,把需要的jar都下载好并且导入(太麻烦,不灵活),而且可能项目中的框架比较多,导入的jar包有重复的,那么导入重复的jar包启动项目肯定会报错,所以博主教大家手把手搭建maven环境,使用…

    2022年5月14日
  • 激活码2089(已测有效)

    激活码2089(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号