Excel 不讲武德,公式界革命,宣布支持 λ 表达式,人人都是程序员

2020-12-15 16:09:22 浏览数 (1)

Excel 已经够强大了,然而就在本月,Excel 宣布开始支持 λ 表达式。

微软是这么说的

参考:

https://techcommunity.microsoft.com/t5/excel-blog/announcing-lambda-turn-excel-formulas-into-custom-functions/ba-p/1925546

微软宣布 Excel 公式开始支持自定义函数。这将是 Excel 中使用公式的革命。Excel 公式是世界上最广泛应用的编程语言,没有之一。然而,作为编程语言,Excel 公式缺失了一些编程语言的天生特性。为了弥补,现在 Excel 推出了用公式定义公式并实现可重用的机制。

该机制基于来自广泛用于函数式编程领域的 λ 表达式理论。

按照微软的这段话来说,有两个重点:

首先,微软承认 Excel 公式就是编程的一种。

从此,使用 Excel 公式的人,也可以说自己是程序员了,所以,写不出来不要哭,要好好学习哦。

其次,为了补充 Excel 公式的能力,设计团队使用了 λ 表达式来扩充 Excel 公式的能力。

啥是 λ 表达式,表示完全听不懂,彻底蒙蔽了。

下面来一段科普。

啥是 λ 表达式

λ 表达式(读作:拉姆达表达式),来自 λ 演算,λ(Lambda(大写Λ,小写λ)读音:lan b(m) da(兰亩达)['læ;mdə])演算是一套用于研究函数定义、函数应用和递归的形式系统。它由数学家阿隆佐·邱奇在20世纪30年代首次发表。

听着好牛的样子,有没有?

λ 演算是图灵完备的,也就是说,这是一个可以用于模拟任何图灵机的通用模型。

图灵,有印象,是什么鬼?

在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它是图灵完备的。这个词源于引入图灵机概念的数学家艾伦·图灵。

图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。

虽然图灵机会受到储存能力的物理限制,图灵完全性通常指“具有无限存储能力的通用物理机器或编程语言”。

听着这些词汇很嚣张有没有:任何有限逻辑数学过程的终极强大逻辑机器。注意:罗叔完全复制某度的专业解释,不敢乱加个人理解。

那么,λ 演算是图灵完备的,也就是说,这是一个可以用于模拟任何图灵机的通用模型。

λ 演算在数学、哲学、语言学和计算机科学中都有许多应用。它在程序语言理论中占有重要地位,函数式编程实现了 λ 演算支持。λ 演算在范畴论中也是一个研究热点。也就是说,这么强大的不讲武德的年轻人,被搞进了 Excel 里,而且以后我们都可以用到了。

大家不要再争了,我们都是程序员了。

没有错,有着良好初高中数学基础的伙伴,都可以在 Excel 里用公式编程了。

LAMBDA - λ 表达式在 Excel 里可以干啥坏事

Excel 有着已有的丰富函数系统,但是有一个遗憾:人们不能定义自己的函数。

有人会反对,那一定是 VBA 小哥哥了,VBA 小哥哥的确可以用 VBA 定义一个自定义的 Excel 函数,但着需要 Excel 的叔叔 VBA,现在 Excel 要让自己的孙子的儿子来做这件事,不要 VBA 叔叔管了。

也就是说,Excel 开始允许用户用单纯的 Excel 函数来定义任意自己想要的函数。

简答的说,这在 Excel 里可以做两件坏事:

  • 定义可以重用的自定义函数
  • 实现递归

举例子来说明吧。

实现自定义函数

举一个例子:

如果希望从 Station ID 列得到不含有数字部分的单词作为 Location,在 Location 列编写 Excel 函数如下:

代码语言:javascript复制
=LEFT(RIGHT(B18,LEN(B18)-FIND("-",B18)),FIND("-",RIGHT(B18,LEN(B18)-FIND("-",B18)))-1)

能写出这个函数的,高考数学分数不会太低,这有两个问题:

  • 如果某个逻辑用在多个地方,一旦要修改就要各处去修改。
  • 可读性太差。Excel 就是离职时不满写下天书的绝佳阵地。

于是,这个叫 LAMBDA 的函数来了。他可以治愈所有问题。打开:

我们可以这么写了:

定义一个函数叫:GETLOCATION,内容如下:

代码语言:javascript复制
=LAMBDA(stationID, LEFT(RIGHT(stationID,LEN(stationID)-FIND("-",stationID)),FIND("-",RIGHT(stationID,LEN(stationID)-FIND("-",stationID)))-1))

然后就可以这么用了:

可以使用自己定义的函数了,太神奇了。

实现递归

举一个例子:

现在我们想从 String 列去掉 Remove 列的内容而得到需要的东西,如上。

打开命名窗口:

定义这个函数叫:REMOVECHARS,内容如下:

代码语言:javascript复制
=LAMBDA(textString, illegalChars,
     IF(illegalChars="", textstring,
       REMOVECHARS( 
       SUBSTITUTE(textString, LEFT(illegalChars, 1), ""), 
       RIGHT(illegalChars, LEN(illegalChars)-1)
)))

这个函数在定义的时候,居然可以自己调用自己。这就是递归。

然后就可以实现:

是不是很厉害。

名称管理器在哪里

晕。

这个大家都用过,只要定义名称就可以了。如下:

定义完成后:

接着就可以正常使用了。

为啥我的 Excel 没有这个函数

这是 Excel 的最新功能,位于测试频道,需要您的产品加入 Office 预览计划,大家不要着急,Excel 也是每个月都更新的,相信在普通版里很快就可以见到了。

在这里可以加入体验计划:https://insider.office.com/zh-cn/join/windows

此功能一出,Excel 界震动了,曾经的表哥表姐,由于有了 λ 表达式,都可以高高兴兴的成为程序员啦。

然而也有小伙伴感叹到:

Excel 完全不讲武德嘛,本来就已经够强大了,现在把拉姆达也搞进来了,人人都可以成为程序员啦,这好吗?这不好。

我劝一句:耗子为汁吧。

快说说您怎么看的~ 有没有大神一句话解释下啥是 λ 演算,实在看不懂~

0 人点赞