计算机语言lambda,神奇的lambda表达式——函数式编程必学

作为一名有追求的程序员,对于计算机基础的理论一定要有所了解。最近几年,随着分布式、云计算等技术的发展,函数式编程语言也趋于流行。如果要学习函数式编程,一定要深入理解它背后的理论知识。从收益的角度上讲,这些基础理论知识几十年不变,是十分值得花时间进行学习的。lambda演算(Lambda Calcus)就属于这样一套理论,可以说它在函数式编程领域就如牛顿万有引力定律一样基础。接下来这篇文章我将主要介绍lambda演算的基本知识,最后我还会用尝试用es6的箭头函数来演示如何利用lambda演算来实现编程语言中的基本组成要素。

lambda演算是什么?

要了解一个事物,先了解它的历史一定是重中之重。lamda表达式最初是由一个美国普林斯顿大学的数学家Alonzo Church在1932年所发明的。他也是"计算机科学之父"——图灵的博士生导师。

我们都知道现代的计算机基本上都是基于图灵机的。在图灵机中,所有的计算过程其实都是基于状态的,这也是为什么我们平常写代码要声明并使用变量的原因:变量主要作用就是用来存储状态。而Alonzo Church所提出的lamda演算(lamda calcus)模型实际上是基于函数的。图灵机模型和Lambda演算模型虽然是两种不同的理论模型,但它们实际上是等价的,这也意味着,任何基于图灵机的计算机程序都能等价地翻译成基于lambda演算模型的程序。

lambda演算是一套研究函数定义、函数应用和递归的形式系统。它基本的组成部分就是三种表达式: 1. 函数定义 2. 标识符引用 3.函数应用。

那么到底什么是lamda表达式呢,它又是由哪些基本组成要素构成的呢?我们都知道在函数式编程语言里面,最基本的组成单位就是函数。lambda表达式从定义上来讲可以看做是一个匿名的纯函数。ES6中引入了箭头函数,它的本质实际上就是我们这里所说的lambda表达式:

const lambda = x => x + 1;

实际上现在大部分的编程语言都引入了lambda表达式这一特性,如Java, c#和es6等。我们通常将lambda表达式,看作是一个黑盒,只关心它的输入和输出。由于没有内部状态,用函数式编程的思想写代码就与用命令式语言写代码截然不同。作为一个纯函数,每一次运行定义好的lambda表达式的时候,结果都应该是一致的。

在纯粹的lambda演算中实际上是没有任何内置的数据结构和逻辑控制语句的,但是我们可以使用函数来建构整个编程语言的所有要素。

lambda演算中的一些基本规则,可以类比到我们比较熟悉的ES6语法:

lambda表达式

ES6 箭头函数定义函数

λx.x

x => x

柯里化 curry

λx. λy.x+y

x => y => x + y

应用 application

(λx. λy.x+y) 5 1

(x => y => x + y) (5) (1)

如何实现

在实现具体的逻辑之前,我们

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值