lambda:Excel工作表函数

2021-04-23 00:26:35

自从它在20世纪80年代发布以来,微软Excel改变了人们如何组织,分析和可视化他们的数据,为每天使用它的数百万人提供决策的基础。这也是世界上使用的最广泛的编程语言。 Excel公式由用户组合的所有C,C ++,C#,Java和Python程序员所写的数量级。尽管取得了成功,但被认为是编程语言Excel具有基本弱点。多年来,两种特定的缺点已经脱颖而出:(1)Excel公式语言实际上只支持标量值,字符串和布尔值 - (2)它没有让用户定义新功能。

Microsoft Research Cambridge的Calc Intelligence项目与Excel团队有一项长期的合作伙伴关系,将电子表格公式转换为全方位的编程语言。该伙伴关系的果实开始出现在产品本身。在2019年ACM SIGPLAN编程语言原理研讨会上(POPL 2019),我们宣布了两个重要的发展:数据类型取消Excel超越文本和数字,允许单元格包含与外部数据链接的实体,以及动态阵列允许普通公式将泄漏到相邻电池中的整个阵列计算。这些变化是我们第一次挑战的大幅度开始:Rich,Excel中的完全一流的结构化数据。

在2020年12月,我们宣布了Lambda,它允许用户定义以Excel自己的方程式编写的新功能,直接解决了我们的第二个挑战。这些新定义的函数可以称为其他λ定义的函数,以递归均匀深度。随着Lambda,Excel已经成为完成。您现在可以在原则上编写Excel Faperse Languial的任何计算。 Lambda可供企业会员提供:Beta计划。初始版本有一些实施限制,我们期望在未来提升。我们讨论了Lambda和我们在Popl 2021上呈现的赞助视频中的电子表格研究。

自20世纪60年代以来,研究人员已知教会的λ符号是广泛的编程语言的基础,因此是一个高度表现力的编程构造。它的纳入Excel代表了一个定性的转变,而不仅仅是一个增量变化。

为了说明Lambda的力量,这是使用符号编写的函数来计算右角度三角形的斜边的长度:

Lambda补充了3月2020年3月的发布,允许我们构建与此相同的例子:

该函数需要两个名为x和y的参数,将x * x值绑定到名称xs,将y * y的值绑定到ys,并将sqrt(xs + ys)绑定为结果。

Excel中的现有名称管理器允许任何公式给出一个名称。如果我们命名我们的函数pythagoras,那么诸如Pythagoras(3,4)之类的公式将评估为5.一旦命名,您将按名称调用函数,无需在要使用它们时重复整个公式。

此外,Lambda是我们所知道和爱的真正的Lambda:Lambda可以是另一个λ或结果的争论;您可以定义教堂数字; lambdas可以返回lambdas,所以你可以做咖喱;您可以使用Lambda定义一个固定点组合器,因此编写递归函数;等等。 (另外,由于Lambdas可以命名,它们可以递归直接呼叫自己,这比使用固定点组合器更方便。)

反转字符串超出Excel的内置函数,并且只能通过使用Visual Basic或JavaScript在公式语言之外写入。以下是作为递归Lambda反转的定义,它利用了几个辅助功能 - 头部和尾部 - 以分别计算第一个字符和所有内容,而不是第一个字符。

即使在不依赖于递归定义的名称,公式语言也是如此,因为我们可以使用经典呼叫乘值固定点组合器编码递归函数定义。实际上,运行此组合器是Excel CodeBase中Lambda的早期压力测试之一。这里应用于定义阶乘函数。

(相比之下,Felienne Hermans的可爱博客文章关于在Excel中编写一个图灵机没有,严格地说,建立图灵完整性,因为它使用连续行为的连续状态,因此步骤的数量受到行数的限制。)

还有更多的东西来。在短期内,我们希望看到完全可嵌入的数组和数组处理组合器的有效实现,例如映射和减少,将Lambda函数作为其参数。除此之外,我们希望不仅仅是通过单个公式定义功能,而是通过整个工作表,所谓的纸张定义函数,甚至是弹性表定义函数。实际上,通过允许用户通过多个单元格分布在多个单元格中,通过多种公式定义更大的函数,将“使用典型电子表格设计的函数”顺其流动“。

如果其用户群可以容易地和有效地使用其电源,则只有编程语言才能成功。人们可能怀疑lambda是否适合编程语言爱好者,但对于最终用户来说,终点是难以理解的。在释放Lambda时,Microsoft在以更高阶函数的最终用户编程有效地启动了全球规模的实验。

早期反馈令人鼓舞。在12月24日在12月的发布中,有多个视频,包括跨列拆分数据以及一个在使用lambda上的一个,并让博客帖子,例如在计算轴尺度上的博客文章Excel社区描述了我们从未想过的Lambda的应用。贸易文章介绍Excel转换为TING完整的编程语言。

此外,即使提高人员和知识来作者兰布,也没有额外的技巧来称呼它。 Lambda允许熟练的作者将Excel扩展到应用程序域的特定函数,这些函数与他们的同事无缝的Excel的一部分出现,他只需调用它们。

有趣的是,了解用户如何继续尝试并不仅适用Lambda,还可以应用数据类型和动态阵列。我们认为,这些新的功能规划功能将改变人们如何与Excel做出决定。

我们与产品团队的伙伴关系举例说明了研究和实践之间的共生。例如,与许多长期的编程系统一样,Excel语义的唯一真正精确的文档是其源代码。因此,要了解什么Excel,我们开发了一种书面语义,以及Ringscript中的公式评估的参考实施。

我们最初认为Excel Faperse语言非常简单 - 这是什么使其使其如此有吸引力 - 但我们发现它体现了各种有趣和鲜为人知的特征。例如,在Excel中,网格的矩形区域 - 是一类值。函数行(范围)返回范围的第一行的行号,如此行(A7:A99)返回7.但是由于范围是第一类,因此可以通过函数返回:索引(A7:A99,3)返回它们例如,返回对范围A7:A99的第三个小区的引用:A9-即范围A9:A9 - 而不是小区A9的值。如此行(索引(A7:A99,3))返回9. Excel具有相当多的函数,占用或返回范围,包括联合和交叉路口运算符。它甚至具有间接函数,它占据了一个字符串并将其解释为范围:间接(“A9”&“9”)返回范围A99:A99(这里&是字符串连接)。

我们还发现Excel具有“自动提升”功能在阵列上的机制。例如,SUM(A2:A100 + 1)占A2:A100的范围,将其解除到99值的向量(因为(+)不接受引用),然后将一个元素添加一个(升降(+)阵列),并总结结果。我们花了一些时间来了解推动这种行为的精确规则,但他们原来是简单和系统的。

编写Excel Fapernale的独立语义的行为导致了一些扩展的对话与Excel团队,许多实验验证,以及与Excel工程师的一次谈话,谁检查了源代码。

我们独立的参考实施不仅充实并将语义带到了生活中,但它也会终于对Web版本的Excel非常有用,这需要评估浏览器中的公式。阅读Calc.ts的故事,它在Microsoft车库墙上的Microsoft Garage墙上的Web版本的客户端计算权力。除了产品影响之外,Calc.TS也是一个奇妙的研究资产,因为它允许在实习生或大学项目的快速实验中进行异式评估的变化,以便进行逼真,例如实习生。如果您希望访问Calc.ts,请告诉我们是否可以获得研究目的。

更广泛地,我们建立了我们的伙伴关系,以开发围绕最终用户编程主题的研究计划,具体涉及编程语言,人机互动和机器学习之间的研究交叉,如此选择的论文所证明:

最终用户概率编程(2019年QEEST):我们检查Rand()如何允许在电子表格中进行概率编程,并考虑如何通过最终用户增强概率建模的页面定义的功能。

了解和推断电子表格中的单位(VL / HCC 2020):我们将一个正式的类型系统与机器学习相结合,以预测电子表格中的数字单位。

Gridlets:重用电子表格网格(CHI 2020;延迟工作):我们在适用于电子表格重用的计算和演示文稿中提出了一种新的抽象。

具有溢出的阵列的高阶电子表格(ESOP 2020):我们为动态阵列提供了一个正式的语义,提出了网格微积分,延长公式评估以实现Gridlet。

电子表格理解:猜测,放弃并回到作者(Chi 2021):我们研究人们如何了解如何理解一个不熟悉的电子表格如何工作,我们概括为发现常见问题。

Tweeakit:支持转换代码的最终用户程序员(CHI 2021):我们调查代码片段输出的实时预览如何支持从Web复制和修改代码的最终用户来处理电子表格中的数据。 计算智慧正在招聘。 我们的目标是成为一支多样化的团队,代表一系列学科,包括人机互动,机器学习和编程语言。 您在我们团队中的工作可能会对世界上最受欢迎的编程语言产生真正的影响! 了解更多关于2021年的实习机会,在人机交互和编程语言中以及CALP Intelligence项目中。