Lambda Ultimate指的是Lambda微积分的lambda可以有效地实现过去,现在和将来的每种编程语言中的每个内置概念。类,模块,包,对象,方法,控制流,数据结构,宏,连续性,协程,生成器,列表推导,流等。
碰巧的是,最终性质包括代表匿名功能。但是,lambda的核心并不仅限于匿名函数。他们以这种方式被教导,但是lambda的本质比没有名字的数学函数要深入得多。换句话说,我对以下问题表示怀疑:
我了解lambda的含义,匿名函数的概念既简单又强大,但是我无法理解在这种情况下“最终”的含义。
实际上,使用lambda作为语法抽象(“宏”)不是按值调用或应用(数学函数),对于理解lambda确实可以充当每个编程语言处理系统的核心。
对于理论:在朴素集理论中,与Bertrand Russell的悖论和理解(和扩展)公理有着有趣的联系。lambda是函数的作用,即set-builder表示法对集合的作用:lambda是function-builder表示法。(lambda(x)(* xx))与计算结果之间的重要差异(平方函数)之间通常会被忽略。如果一个人通常不能区分两者,即不能区分符号和符号(Church和Frege都犯了一个错误),那么这就会与悖论相违背。对于布斯和弗雷格来说,是贝特朗·罗素(Bertrand Russell)的塞维利亚理发师(Barber of Seville)证明了这个错误;对于职能和教会而言,这是艾伦·图灵(Alan Turing)的《停止甲骨文》。
请注意,这些悖论是好的,实用的东西。我们希望EVAL具有可表达性,并且我们希望Lambda不仅意味着功能。假设相反会导致矛盾,这是理想的结果。它可以作为一个很好的完整性测试:如果lambda仅表示功能,则它们几乎不可能是最终的。
Racket(以前称为PLT Scheme)继续提倡这样一种想法,即实际上可以完全从“只是lambda”构建实用的编程语言。
Shutt的Kernel认为lambda并不是最终的抽象。他认为,还有一个更原始的概念(对于希腊语,称为vau),萨斯曼将其称为FEXPR。
Felleisin和公司(用于Racket)通过使用阶段或元级别的概念来获得Shutt的vau的强大功能,这大约意味着通过多个翻译阶段(如预处理C,但在每个阶段使用相同的语言)运行源代码。 “步骤”和“步骤”实际上在时间上并不完全不同)。(因此,他们认为较高阶段的lambda近似于vau足够好。)实际上,他们认为阶段优于 FEXPR,恰恰是因为阶段有限。简而言之,“ FEXPR太强大了”(请参阅Shutt反对的Wand的著作)。
布赖恩·史密斯(Brian Smith)的3-Lisp,“编程语言中的过程反射”,试图通过将符号(符号/语言/程序)与符号(事物/引用/值/值/结果)区分开来,对LISP类语言的理论进行严格的重新表述。 )。http://dspace.mit.edu/handle/1721.1/15961
米切尔·旺德(Mitchell Wand)的“ FEXPR理论很琐碎”为肯特·皮特曼(Kent Pittman)为FEXPR设计的(临时的)棺材钉上了更多的钉子(像Felleisen一样,他反对FEXPR会使编译变得太难了)。
保罗·格雷厄姆(Paul Graham)在《论Lisp》中长篇大论地指出,真正的力量是作为语法(宏观)的转换器而不是作为价值(数学函数)的转换器的lambda。普洛特金(Plotkin)对应用型lambda演算的发展可以被视为某种对比,因为普洛特金(Plotkin)将丘奇(Church)的演算限制为按值/应用子集。当然,有效地处理应用部分非常重要,因此开发专门用于lambda的理论非常重要。(普洛特金和格雷厄姆并不反对。)
实际上,总的来说,Lambda作为Ultimate的概念仅仅是对效率与表现力之间永恒争论的一种扭曲。lambda是表达能力的最终工具,在经过足够的研究后,lambda最终还将被证明是提高效率的最终工具。换句话说,如果愿意的话,我们可以将编程语言的未来视为对如何有效实现lambda微积分的所有实际相关片段的研究。
Landin的“下700种编程语言”,http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf,是可访问的参考资料,有助于发展Lambda是终极的概念。