1.电子表格:电子表格:函数式编程面向大众的函数式编程西蒙·佩顿·琼斯西蒙·佩顿·琼斯玛格丽特·伯内特·玛格丽特·伯内特艾伦·布莱克威尔艾伦·布莱克威尔。
3.问题1:微软研究院的函数式程序员应该做什么?答案1:说服开发人员使用Haskell实现。再也没有C#了!哈斯克尔更厉害了!
4.Q1:微软研究院的函数式程序员应该做什么?A1:问Q2Q2:到目前为止,世界上使用最广泛的函数式语言是什么?
5.问题1:MSR中的函数式程序员应该做什么?问题2:到目前为止,世界上使用最广泛的函数式语言是什么?Violentexthermicreaction Excel!
6.电子表格是函数式电子表格是函数式程序B1=A1*A1C1=A2*A2D1=B1-C1B2=A1+A2C2=A1-A2D2=B2*C2只是一大堆公式没有副作用评估顺序由数据控制由数据依赖关系控制。
7.问题3:头脑敏锐的研究人员有多大可能影响微软摇钱树的走向?
8.问题3:头脑敏锐的研究人员有多大可能影响微软摇钱树的走向?
9.市场规模可以使用VB,C++可以使用Excel2m50m2M“经典”程序员(编写VB、C++、C#)5000万最终用户程序员·真正的工作是工程、教学、财务;NOT编程·使用Excel公式构建模型·不需要推销函数式编程:他们已经在做了!Excel的市场是很有吸引力的最终用户
11.市场规模2m50m程序员最终用户应用程序要求要求很高,但范围很窄当任务...变得很大或很复杂随时间变化奖励重用是任务关键型...。单元格和公式不够。当前解决方案:转换编程范例使用Excel+VB、C#。
12.市场规模200万人我们的愿景程序员最终用户应用程序要求开拓新领域通过允许最终用户在不聘用程序员的情况下编写程序来扩大Excel的“覆盖范围”
13.ExcelFunctional Programming Research输入Excel Plus终端用户和可视化软件编程心理学Simon Peyton Jones Margaret Burnett Alan Blackwell基于经验、基于经验的研究、扎根的研究,将设计时的重点放在了可用性上,设计时的重点放在了可用性上。
14.我们的目标最终用户在所有的EXCEL用户中,有些只是使用EXCEL做列表有些人只用EXCEL做列表有些人会打非常简单的公式,例如=SUM(A1:A10)有些会打非常简单的公式如=SUM(A1:A10)有些会用公式,了解公式的复制粘贴一些用公式,了解公式的复制粘贴(绝对和相对单元格引用)公式(绝对单元格引用和相对单元格引用)有些会用Visual Basic。
15.我们的目标最终用户在所有的EXCEL用户中,有些只是使用EXCEL做列表有些人只用EXCEL做列表有些人能打出非常简单的公式,例如=(A1:A10)有些人能打出非常简单的公式如=SUM(A1:A10)有些人会用公式,并能理解复制粘贴公式有些人用公式,了解公式(绝对和相对单元格引用)的复制粘贴公式(绝对和相对单元格引用)有些人会用Visual Basic。
18.少了什么?少了什么?B1=A1*A1C1=A2*A2D1=B1-C1B2=A1+A2C2=A1-A2D2=B2*C2。
19.场景场景教师键入公式来计算学生成绩教师类型公式来计算学生成绩复制并粘贴一列并粘贴一列(很久以后)想要更改公式问题必须更改多个单元格才能实现一次更改必须更改多个单元格才能实现一次更改影响重用、易出错、模块化影响重用、易出错、模块化明显的解决方案。
21.。用户显示正确的单击用户显示正确的单击Menumenu剪切复制粘贴…。将函数设为…
22.。自动创建新函数在工作表中自动创建新函数,并在工作表中调用创建的新函数工作表公式由对函数的调用替换为新函数工作表公式。
25.。用作工作表的函数创建作为工作表的函数创建函数是快速的函数是快速的理解理解函数不需要新的技能:技能:不需要范式转换不需要范式转换使用函数可以提高质量提高质量命名抽象是我们的主要武器命名抽象是我们对抗复杂性的主要武器。想象一下在对抗复杂性的战争中。想象一下,传统编程没有程序,只有智能复制/粘贴!程序,只有智能复制/粘贴!
26.。从头开始创建函数从头开始创建函数构建工作表计算球的移动距离构建工作表计算球在特定角度和速度下移动的距离当以特定角度和速度移动时将其转换为函数通过识别输入单元格将其转换为函数通过识别输入单元格(有点像“Scenario”,仅可调用)单元格(有点像“Scenario”,仅可调用)多次调用函数调用该函数,以执行以下操作:通过确定输入单元格(有点类似于“Scenario”,仅可调用)单元格(有点类似于“Scenario”,仅可调用)多次调用该函数来执行以下操作:通过识别输入单元格(有点类似于“Scenario”,仅可调用)将其转换为函数。
27.。调试调试“调用树”变成一棵链接树“调用树”变成一棵链接工作表的树,工作表在空间上布局,而不是在时间上在空间上,在时间上也不在时间上。因此调试特别容易。需要新消息,所以调试特别容易。需要新的机制来导航过多的工作表机制,通过树形结构来导航过多的工作表。工作表,通过树形结构。第一年的编程课程将变得更加严格。第一年的编程课程将变得更加严格!这样!
29.。领域特定库领域特定库每个领域(物理、电子、统计、每个领域(物理、电子、统计、金融、营销...)。拥有特定领域的金融、营销...)。具有特定领域的抽象。EXCEL的函数库是用户打包这些抽象的理想方式。EXCEL的函数库是为EXCEL用户打包这些抽象的理想方式。因此,我们想让最终用户更容易地构建、封装和共享他们自己的函数,而不需要专业程序员的帮助来构建、封装和共享他们自己的函数库,而不需要专业程序员的帮助。
31.。第一类数据值第一类数据值用户定义函数需要数组参数。用户定义函数需要数组参数。例如。SUM(A1:B9)例如SUM(A1:B9)简单但强大的思想:简单而强大的思想:标量可以做的任何事情,标量可以做的任何事情,数组都可以做的事情数组可以做的事情::是公式的值是单元格的值是函数的参数或结果使Excel现有的“数组公式”变得更简单、更简单。
32.。第一类值第一类值货币;一般单位(单位感知算术)货币;一般单位(单位感知算术)超级链接超级链接矩阵(索引、加法、乘以…)。矩阵(索引、加法、乘法…)。关系(筛选、选择、联接…)。关系(Filter、Select、Join…)。XMLBLOB(查询,组合)XMLBLOB(查询,组合)图片(从数字生成图片,组合图片(从数字生成图片,组合图片)图片)每个值类型都有一个完整的值类型,每个值类型都有一个基于其上的函数库的函数指令集。
33.。批量数据操作批量数据操作A1=…。连接到数据库关系…。A1=…。连接到数据库关系…。A2=EXTEND(A1,[First Name],GetFirst([name]))A2=EXTEND(A1,[First Name],GetFirst([name]))A3=EXTEND(A1,[Last Name],GetLast([name]))A3=EXTEND(A1,[Last Name],GetLast([name]))A4=Filter(A3,and([Age]&>;30,[Age]<;50))A4=筛选器(A3,和([Age]&>;30,[Age]<;50))A5=Select(A4,[First Name],[Last Name],[Age])A5=Select(A4,[First Name],[Last Name],[Age])今天可以手动完成(例如,数据/自动筛选),但不能自动执行
34.。可扩展类型可扩展类型对于VB或C#程序员来说,添加新的数据类型和新的数据类型应该很容易。Excel只需要知道。Excel需要知道的全部内容是:关于它:如何显示它如何显示如何“钻取”它以显示其全部值如何“钻取”它以显示其全部值如何“钻取”它以显示其全部价值也许,如何将其转换为数字/字符串可能,如何将其转换为数字/字符串可能如何将其转换为数字/字符串重计算链和依赖关系分析是完全不受影响的重计算链和依赖关系分析完全不受影响。
35.。回到超级油轮回到超级油轮小船员,高价值有效载荷,许多客户小船员,高价值有效载荷,许多客户请求,所以系统的改变并不容易要求,所以系统的改变不容易Excel2003推出--下一个版本Excel2003已经推出--下一个版本正在设计我们正在与Excel团队定期交谈我们正在定期(每周)与Excel团队交谈。
36.。回到超级油轮回到超级油轮小船员,高价值有效载荷,许多客户小船员,高价值有效载荷,许多客户请求,所以系统的改变并不容易要求,所以系统的改变不容易Excel2003推出--下一个版本即将推出--下一个版本正在设计我们每周都在和Excel团队交谈下一个:Next:高阶函数高阶函数。
37.。功能性编程最终用户和可视化软件工程编程心理学赋予非程序员最终用户(会计师、工程师、推销员...)。做以前做不到的事情·通过构建可重复使用的抽象来控制复杂性·在更雄心勃勃的应用程序中取得成功·将特定领域的专业知识封装在函数库中·尽早粉碎更多错误总结总结多学科inputshttp://research.microsoft.com/~simonpj/papers/excel