编译自: https://twobithistory.org/2018/10/14/lisp.html
作者: Two-bit History
译者: Northurland
当程序员们评论辩论各种编程措辞的相对上风时,他们常日会采取相称平淡的措词,就彷佛这些措辞是一条工具带上的各种工具似的 —— 有适宜写操作系统的,也有适宜把其它程序黏在一起来完成分外事情的。这种谈论办法非常合理;不同措辞的能力不同。不声明特定用场就声称某门措辞比其他措辞更精良只能导致侮辱性的无用辩论。
但有一门措辞彷佛受到和用场无关的分外尊敬:那便是 Lisp。纵然是恨不得给每个说出形如“某某措辞比其他所有措辞都好”这类话的人都来一拳的键盘远征军们,也会承认 Lisp 处于另一个层次。 Lisp 超越了用于评判其他措辞的实用主义标准,由于普通程序员并不该用 Lisp 编写实用的程序 —— 而且,多数他们永久也不会这么做。然而,人们对 Lisp 的敬意是如此深厚,乃至于到了这门措辞会时而被加上神话属性的程度。
大家都喜好的网络漫画合集 xkcd 就至少在两组漫画中如此描述过 Lisp: 个中一组漫画 中,某人得到了某种 Lisp 启迪,而这彷佛使他理解了宇宙的基本构架。
在 另一组漫画 中,一个穿着长袍的老程序员给他的徒弟递了一沓圆括号,说这是“文明时期的优雅武器”,暗示着 Lisp 就像原力那样拥有各式各样的神秘力量。
另一个绝佳例子是 Bob Kanefsky 的风趣剧插曲,《上帝就在人间》。这部剧叫做《永恒之火》,撰写于 1990 年代中期;剧中描述了上帝一定是利用 Lisp 创造天下的各类缘故原由。完全的歌词可以在 GNU 诙谐合集 中找到,如下是一段摘抄:
由于上帝用祂的 Lisp 代码
让树叶充满绿意。
分形的花儿和递归的根:
我见过的奇技淫巧之中没什么比这更可爱。
当我对着雪花寻思时,
从未见过两片相同的,
我知道,上帝偏爱那一门
名字是四个字母的措辞。
以下这句话我实在不好在人前说;不过,我还是以为,这样一种 “Lisp 是奥术邪术”的文化模因实在是有史以来最奇异、最迷人的东西。Lisp 是象牙塔的产物,是人工智能研究的工具;因此,它对付编程界的俗人而言总是陌生的,乃至是带有神秘色彩的。然而,当今的程序员们 开始鞭策彼此,“在你去世掉之前至少试一试 Lisp” ,就像这是一种令人恍惚入迷的致幻剂似的。只管 Lisp 是广泛利用的编程措辞中第二古老的(只比 Fortran 年轻一岁) 1 ,程序员们也仍旧在相互鞭策。想象一下,如果你的事情是为某种组织或者团队推广一门新的编程措辞的话,忽悠大家让他们相信你的新措辞拥有神力难道不是绝佳的策略吗?—— 但你如何能够做到这一点呢?或者,换句话说,一门编程措辞究竟是如何变成人们口中“隐晦知识的载体”的呢?
Lisp 究竟是怎么成为这样的?
Byte 杂志封面,1979年八月。
理论 A :公理般的措辞Lisp 的创造者 约翰·麦卡锡(John McCarthy)最初并没有想过把 Lisp 做成优雅、精髓精辟的打算法则结晶。然而,在一两次运气使然的深谋远虑和一系列优化之后,Lisp 的确变成了那样的东西。 保罗·格雷厄姆(Paul Graham)(我们一下子之后才会聊到他)曾经这么写道, 麦卡锡通过 Lisp “为编程作出的贡献就像是欧几里得对几何学所做的贡献一样平常” 2 。人们可能会在 Lisp 中看出更加隐晦的含义 —— 由于麦卡锡创造 Lisp 时利用的要素实在是过于根本,根本到连弄明白他到底是创造了这门措辞、还是创造了这门措辞,都是一件难事。
最初, 麦卡锡产生要造一门措辞的想法,是在 1956 年的 达特茅斯人工智能夏季研究项目(Darthmouth Summer Research Project on Artificial Intelligence)上。夏季研究项目是个持续数周的学术会议,直到现在也仍旧在举行;它是此类会议之中最早开始举办的会议之一。 麦卡锡当初还是个达特茅斯的数学助教,而“ 人工智能(artificial intelligence)(AI)”这个词事实上便是他建议举办该会议时发明的 3 。在全体会议期间大概有十人参加 4 。他们之中包括了 艾伦·纽厄尔(Allen Newell)和 赫伯特·西蒙(Herbert Simon),两名从属于 兰德公司(RAND Corporation)和 卡内基梅隆大学(Carnegie Mellon)的学者。这两人不久之前设计了一门措辞,叫做 IPL。
当时,纽厄尔和西蒙正试图制作一套能够在命题演算中天生证明的系统。两人意识到,用电脑的原生指令集编写这套系统会非常困难;于是他们决定创造一门措辞——他们的原话是“ 伪代码(pseudo-code)”,这样,他们就能更加轻松自然地表达这台“ 逻辑理论机器(Logic Theory Machine)”的底层逻辑了 5 。这门措辞叫做 IPL,即“ 信息处理措辞(Information Processing Language)”;比起我们现在认知中的编程措辞,它更像是一种高层次的汇编措辞方言。 纽厄尔和西蒙提到,当时人们开拓的其它“伪代码”都抓着标准数学符号不放 —— 大概他们指的是 Fortran 6 ;与此不同的是,他们的措辞利用成组的符号方程来表示命题演算中的语句。常日,用 IPL 写出来的程序会调用一系列的汇编措辞宏,以此在这些符号方程列表中对表达式进行变换和求值。
麦卡锡认为,一门实用的编程措辞该当像 Fortran 那样利用代数表达式;因此,他并不怎么喜好 IPL 7 。然而,他也认为,在给人工智能领域的一些问题建模时,符号列表会是非常好用的工具 —— 而且在那些涉及演绎的问题上尤其有用。麦卡锡的渴望终极被诉诸行动;他要创造一门代数的列表处理措辞 —— 这门措辞会像 Fortran 一样利用代数表达式,但拥有和 IPL 一样的符号列表处理能力。
当然,今日的 Lisp 可不像 Fortran。在会议之后的几年中,麦卡锡关于“空想的列表处理措辞”的见地彷佛在逐渐蜕变。到 1957 年,他的想法发生了改变。他那时候正在用 Fortran 编写一个能下国际象棋的程序;越是永劫光地利用 Fortran ,麦卡锡就越确信其设计中存在不当之处,而最大的问题便是尴尬的 IF 声明 8 。为此,他发明了一个替代品,即条件表达式 true;这个表达式会在给定的测试通过时返回子表达式 A ,而在测试未通过时返回子表达式 B ,而且,它只会对返回的子表达式进行求值。在 1958 年夏天,当麦卡锡设计一个能够求导的程序时,他意识到,他发明的 true 条件表达式让编写递归函数这件事变得更加大略自然了 9 。也是这个求导问题让麦卡锡创造了 maplist 函数;这个函数会将其它函数作为参数并将之浸染于指定列表的所有元素 10 。在给项数多得叫人抓狂的多项式求导时,它尤其有用。
然而,以上的所有这些,在 Fortran 中都是没有的;因此,在 1958 年的秋日,麦卡锡请来了一群学生来实现 Lisp。由于他那时已经成了一名麻省理工助教,以是,这些学生可都是麻省理工的学生。当麦卡锡和学生们终极将他的主张变为能运行的代码时,这门措辞得到了进一步的简化。这之中最大的改变涉及了 Lisp 的语法本身。最初,麦卡锡在设计措辞时,曾经试图加入所谓的 “M 表达式”;这是一层语法糖,能让 Lisp 的语法变得类似于 Fortran。虽然 M 表达式可以被翻译为 S 表达式 —— 根本的、“用圆括号括起来的列表”,也便是 Lisp 最著名的特色 —— 但 S 表达式事实上是一种给机器看的低阶表达方法。唯一的问题是,麦卡锡用方括号标记 M 表达式,但他的团队在麻省理工利用的 IBM 026 键盘打孔机的键盘上根本没有方括号 11 。于是 Lisp 团队武断不移地利用着 S 表达式,不仅用它们表示数据列表,也拿它们来表达函数的运用。麦卡锡和他的学生们还作了其余几样改进,包括将数学符号前置;他们也修正了内存模型,这样 Lisp 本色上就只有一种数据类型了 12 。
到 1960 年,麦卡锡揭橥了他关于 Lisp 的著名论文,《用符号方程表示的递归函数及它们的机器打算》。那时候,Lisp 已经被极大地精简,而这让麦卡锡意识到,他的作品实在是“一套优雅的数学系统”,而非普通的编程措辞 13 。他后来这么写道,对 Lisp 的许多简化使其“成了一种描述可打算函数的办法,而且它比图灵机或者一样平常情形下用于递归函数理论的递归定义更加简洁” 14 。在他的论文中,他不仅利用 Lisp 作为编程措辞,也将它当作一套用于研究递归函数行为办法的表达方法。
通过“从一小撮规则中逐步实现出 Lisp”的办法,麦卡锡将这门措辞先容给了他的读者。后来,保罗·格雷厄姆在短文《 Lisp 之根 (The Roots of Lisp)》中用更易读的措辞回顾了麦卡锡的步骤。格雷厄姆只用了七种原始运算符、两种函数写法,以及利用原始运算符定义的六个轻微高等一点的函数来阐明 Lisp。毫无疑问,Lisp 的这种只需利用极少量的基本规则就能完全解释的特点加深了其神秘色彩。格雷厄姆称麦卡锡的论文为“使打算公理化”的一种考试测验 15 。我认为,在思考 Lisp 的魅力从何而来时,这是一个极好的切入点。其它编程措辞都有明显的人工布局痕迹,表现为 While,typedef,public static void 这样的关键词;而 Lisp 的设计却切实其实像是纯粹打算逻辑的鬼斧神工。Lisp 的这一性子,以及它和晦涩难懂的“递归函数理论”的密切关系,使它具备了得到如今声誉的充分情由。
理论 B:属于未来的机器Lisp 出身二十年后,它成了著名的《 黑客词典 (Hacker’s Dictionary)》中所说的,人工智能研究的“母语”。Lisp 在此之前传播迅速,多数是托了语法规律的福 —— 不管在怎么样的电脑上,实现 Lisp 都是一件相对大略直白的事。而学者们之后坚持利用它乃是由于 Lisp 在处理符号表达式这方面有巨大的上风;在那个时期,人工智能很大程度上就意味着符号,于是这一点就显得十分主要。在许多主要的人工智能项目中都能见到 Lisp 的身影。这些项目包括了 SHRDLU 自然措辞程序 、 Macsyma 代数系统 和 ACL2 逻辑系统 。
然而,在 1970 年代中期,人工智能研究者们的电脑算力开始不足用了。PDP-10 便是一个范例。这个型号在人工智能学界曾经极受欢迎;但面对这些用 Lisp 写的 AI 程序,它的 18 位地址空间一天比一天显得急急 16。许多的 AI 程序在设计上可以与人互动。要让这些既极度哀求硬件性能、又有互动功能的程序在分时系统上精良发挥,是很有寻衅性的。麻省理工的 彼得·杜奇(Peter Deutsch)给出理解决方案:那便是针对 Lisp 程序来特殊设计电脑。就像是我那 关于 Chaosnet 的上一篇文章 所说的那样,这些 Lisp 打算机(Lisp machines)会给每个用户都专门分配一个为 Lisp 特殊优化的处理器。到后来,考虑到硬核 Lisp 程序员的需求,这些打算机乃至还配备上了完备由 Lisp 编写的开拓环境。在当时那样一个小型机时期已至尾声而微型机的繁盛尚未完备到来的尴尬期间,Lisp 打算机便是编程精英们的“高性能个人电脑”。
有那么一下子,Lisp 打算机被当成是未来趋势。好几家公司雨后春笋般涌现,追着赶着要把这项技能商业化。个中最成功的一家叫做 Symbolics,由麻省理工 AI 实验室的前成员创立。上世纪八十年代,这家公司生产了所谓的 3600 系列打算机,它们当时在 AI 领域和须要高性能打算的家傍边运用极广。3600 系列配备了大屏幕、位图显示、鼠标接口,以及 强大的图形与动画软件 。它们都是惊人的机器,能让惊人的程序运行起来。例如,之前在推特上跟我聊过的机器人研究者 Bob Culley,就能用一台 1985 年生产的 Symbolics 3650 写出带有图形演示的寻路算法。他向我阐明说,在 1980 年代,位图显示和面向工具编程(能够通过 Flavors 扩展 在 Lisp 打算机上利用)都刚刚涌现。Symbolics 站在时期的最前沿。
Bob Culley 的寻路程序。
而以上这统统导致 Symbolics 的打算机奇贵无比。在 1983 年,一台 Symbolics 3600 能卖 111,000 美金 16。以是,绝大部分人只可能远远地惊叹 Lisp 打算机的威力和操作员们用 Lisp 编写程序的奇妙技能。不止他们惊叹,从 1979 年到 1980 年代末,Byte 杂志曾经多次提到过 Lisp 和 Lisp 打算机。在 1979 年八月发行的、关于 Lisp 的一期特殊杂志中,杂志编辑激情洋溢地写道,麻省理工正在开拓的打算机配备了“大坨大坨的内存”和“前辈的操作系统” 17 ;他以为,这些 Lisp 打算机的出息是如此光明,以至于它们的面世会让 1978 和 1977 年 —— 出身了 Apple II、Commodore PET 和 TRS-80 的两年 —— 显得黯淡无光。五年之后,在 1985 年,一名 Byte 杂志撰稿人描述了为“繁芜风雅、性能刁悍的 Symbolics 3670”编写 Lisp 程序的体验,并力劝读者学习 Lisp,称其为“绝大数人工智能事情者的措辞选择”,和将来的通用编程措辞 18。
我问过 保罗·麦克琼斯(Paul McJones)(他在 山景城(Mountain View)()的 打算机历史博物馆(Computer History Museum)做了许多 Lisp 的 保护事情 ),人们是什么时候开始将 Lisp 当作高维生物的赠礼一样评论辩论的呢?他说,这门措辞自有的性子毋庸置疑地促进了这种征象的产生;然而,他也说,Lisp 上世纪六七十年代在人工智能领域得到的广泛运用,很有可能也起到了浸染。当 1980 年代到来、Lisp 打算机进入市场时,象牙塔外的某些人由此打仗到了 Lisp 的能力,于是传说开始滋长。时至今日,很少有人还记得 Lisp 打算机和 Symbolics 公司;但 Lisp 得以在八十年代一贯保持神秘,很大程度上要归功于它们。
理论 C:学习编程1985 年,两位麻省理工的教授, 哈尔·阿伯尔森(Harold Hal Abelson)和 杰拉尔德·瑟斯曼(Gerald Sussman),外加瑟斯曼的妻子 朱莉·瑟斯曼(Julie Sussman),出版了一本叫做《 打算机程序的布局和解释(Structure and Interpretation of Computer Programs)》的教科书。这本书用 Scheme(一种 Lisp 方言)向读者们示范了如何编程。它被用于教授麻省理工入门编程课程长达二十年之久。出于直觉,我认为 SICP(这本书的名字常日缩写为 SICP)倍增了 Lisp 的“神秘要素”。SICP 利用 Lisp 描述了深邃得险些可以称之为哲学的编程理念。这些理念非常普适,可以用任意一种编程措辞展现;但 SICP 的作者们选择了 Lisp。结果,这本阴阳怪气、卓越非凡、吸引了好几代程序员(还成了一种 奇特的模因 )的著作臭名远扬之后,Lisp 的声誉也顺带被提升了。Lisp 已不仅仅是一如既往的“麦卡锡的优雅表达办法”;它现在还成了“向你传授编程的不传之秘的措辞”。
SICP 究竟有多奇怪这一点值得好好说;由于我认为,时至今日,这本书的古怪之处和 Lisp 的古怪之处是相辅相成的。书的封面就透着一股古怪。那上面画着一位朝着桌子走去,准备要施法的巫师或者炼金术士。他的一只手里抓着一副测径仪 —— 或者圆规,另一只手上拿着个球,上书“eval”和“apply”。他对面的女人指着桌子;在背景中,希腊字母 λ (lambda)漂浮在半空,开释出光芒。
SICP 封面上的画作。
说真的,这上面画的究竟是怎么一回事?为什么桌子会长着动物的腿?为什么这个女人指着桌子?墨水瓶又是干什么用的?我们是不是该说,这位巫师已经破译了宇宙的隐蔽奥秘,而所有这些奥秘就蕴含在 eval/apply 循环和 Lambda 微积分之中?看似便是如此。单单是这张图片,就一定对人们如今评论辩论 Lisp 的办法产生了难以计量的影响。
然而,这本书的内容常日并不比封面正常多少。SICP 跟你读过的所有打算机科学教科书都不同。在弁言中,作者们表示,这本书不但教你怎么用 Lisp 编程 —— 它是关于“征象的三个焦点:人的心智、复数的打算机程序,和打算机”的作品 19 。在之后,他们对此进行理解释,描述了他们对如下不雅观点的坚信:编程不该被当作是一种打算机科学的演习,而该当是“ 程序性认识论(procedural epistemology)”的一种新表达办法 20。程序是将那些有时被送入打算机的思想组织起来的全新方法。这本书的第一章简明地先容了 Lisp,但是之后的绝大部分都在讲述更加抽象的观点。个中包括了对不同编程范式的谈论,对付面向工具系统中“韶光”和“同等性”的谈论;在书中的某一处,还有关于通信的基本限定可能会如何带来同步问题的谈论 —— 而这些基本限定在通信中就像是光速不变在相对论中一样关键 21 。都是些博识难懂的东西。
以上这些并不是说这是本糟糕的书;这本书实在棒极了。在我读过的所有作品中,这本书对付主要的编程理念的谈论是最为深刻的;那些理念我琢磨了良久,却一贯无力用笔墨去表达。一本入门编程教科书能如此迅速地开始描述面向工具编程的根本毛病,和函数式措辞“将可变状态降到最少”的优点,实在是一件让人印象深刻的事。而这种描述之后变为了另一种震荡民气的谈论:某种(可能类似于今日的 RxJS 的)流范式能如何同时具备两者的精良特性。SICP 用和当初麦卡锡的 Lisp 论文相似的办法提纯出了高等程序设计的精华。你读完这本书之后,会立即想要将它推举给你的程序员朋友们;如果他们找到这本书,看到了封面,但终极没有阅读的话,他们就只会记住长着动物腿的桌子上方那神秘的、根本的、给予邪术师分外能力的、写着 eval/apply 的东西。话说回来,书上这两人的鞋子也让我印象颇深。
然而,SICP 最主要的影响恐怕是,它将 Lisp 由一门怪措辞提升成了必要的传授教化工具。在 SICP 面世之前,人们相互推举 Lisp,以学习这门措辞为提升编程技巧的路子。1979 年的 Byte 杂志 Lisp 特刊印证了这一事实。之条件到的那位编辑不仅就麻省理工的新 Lisp 打算机大书特书,还说,Lisp 这门措辞值得一学,由于它“代表了剖析问题的另一种视角” 22 。但 SICP 并未只把 Lisp 作为其它措辞的陪衬来利用;SICP 将其作为入门措辞。这就暗含了一种论点,那便是,Lisp 是最能把握打算机编程根本的措辞。可以认为,如今的程序员们彼此鞭策“在去世掉之前至少试试 Lisp”的时候,他们很大程度上是由于 SICP 才这么说的。毕竟,编程措辞 Brainfuck 想必同样也供应了“剖析问题的另一种视角”;但人们学习 Lisp 而非学习 Brainfuck,那是由于他们知道,前者的那种 Lisp 视角在二十年中都被看作是极其有用的,有用到麻省理工在给他们的本科生教其它措辞之前,一定会先教 Lisp。
Lisp 的回归在 SICP 出版的同一年, 本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)发布了 C++ 措辞的首个版本,它将面向工具编程带到了大众面前。几年之后,Lisp 打算机的市场崩盘,AI 寒冬开始了。不才一个十年的变革中, C++ 和后来的 Java 成了出息无量的措辞,而 Lisp 被冷落,无人问津。
天经地义地,确定人们对 Lisp 重新燃起激情亲切的详细韶光并不可能;但这多数是保罗·格雷厄姆揭橥他那几篇声称 Lisp 是首选入门措辞的短文之后的事了。保罗·格雷厄姆是 Y-Combinator 的联合创始人和《Hacker News》的创始者,他这几篇短文有很大的影响力。例如,在短文《 胜于平庸 (Beating the Averages)》中,他声称 Lisp 宏使 Lisp 比其它措辞更强。他说,由于他在自己创办的公司 Viaweb 中利用 Lisp,他得以比竞争对手更快地推出新功能。至少, 一部分程序员 被说服了。然而,弘大的主流程序员群体并未换用 Lisp。
实际上涌现的情形是,Lisp 并未盛行,但越来越多 Lisp 式的特性被加入到广受欢迎的措辞中。Python 有了列表理解。C# 有了 Linq。Ruby……嗯, Ruby 是 Lisp 的一种 。就如格雷厄姆之前在 2001 年提到的那样,“在一系列常用措辞中所表示出的‘默认措辞’正加倍朝着 Lisp 的方向蜕变” 23 。只管其它措辞变得越来越像 Lisp,Lisp 本身仍旧保留了其作为“很少人理解但是大家都该学的神秘措辞”的分外声誉。在 1980 年,Lisp 的出身二十周年纪念日上,麦卡锡写道,Lisp 之以是能够存活这么久,是由于它具备“编程措辞领域中的某种近似局部最优” 24 。这句话并未充分地表明 Lisp 的真正影响力。Lisp 能够存活超过半个世纪之久,并非由于程序员们一年年地勉强承认它便是最好的编程工具;事实上,纵然绝大多数程序员根本不用它,它还是存活了下来。多亏了它的起源和它的人工智能研究用场,说不定还要多亏 SICP 的遗产,Lisp 一贯都那么让人着迷。在我们能够想象上帝用其它新的编程措辞创造天下之前,Lisp 都不会走下神坛。
via: https://twobithistory.org/2018/10/14/lisp.html
作者: Two-Bit History 选题: lujun9972 译者: Northurland 校正: wxy
本文由 LCTT 原创编译, Linux中国 名誉推出
John McCarthy, “History of Lisp”, 14, Stanford University, February 12, 1979, accessed October 14, 2018, http://jmc.stanford.edu/articles/lisp/lisp.pdf ↩Paul Graham, “The Roots of Lisp”, 1, January 18, 2002, accessed October 14, 2018, http://languagelog.ldc.upenn.edu/myl/llog/jmc.pdf . ↩Martin Childs, “John McCarthy: Computer scientist known as the father of AI”, The Independent, November 1, 2011, accessed on October 14, 2018, https://www.independent.co.uk/news/obituaries/john-mccarthy-computer-scientist-known-as-the-father-of-ai-6255307.html . ↩Lisp Bulletin History. http://www.artinfo-musinfo.org/scans/lb/lb3f.pdf ↩Allen Newell and Herbert Simon, “Current Developments in Complex Information Processing,” 19, May 1, 1956, accessed on October 14, 2018, http://bitsavers.org/pdf/rand/ipl/P-850_Current_Developments_In_Complex_Information_Processing_May56.pdf . ↩ibid. ↩Herbert Stoyan, “Lisp History”, 43, Lisp Bulletin #3, December 1979, accessed on October 14, 2018, http://www.artinfo-musinfo.org/scans/lb/lb3f.pdf ↩McCarthy, “History of Lisp”, 5. ↩ibid. ↩McCarthy “History of Lisp”, 6. ↩Stoyan, “Lisp History”, 45 ↩McCarthy, “History of Lisp”, 8. ↩McCarthy, “History of Lisp”, 2. ↩McCarthy, “History of Lisp”, 8. ↩Graham, “The Roots of Lisp”, 11. ↩Guy Steele and Richard Gabriel, “The Evolution of Lisp”, 22, History of Programming Languages 2, 1993, accessed on October 14, 2018, http://www.dreamsongs.com/Files/HOPL2-Uncut.pdf . ↩ ↩1Carl Helmers, “Editorial”, Byte Magazine, 154, August 1979, accessed on October 14, 2018, https://archive.org/details/byte-magazine-1979-08/page/n153 . ↩Patrick Winston, “The Lisp Revolution”, 209, April 1985, accessed on October 14, 2018, https://archive.org/details/byte-magazine-1985-04/page/n207 . ↩Harold Abelson, Gerald Jay. Sussman, and Julie Sussman, Structure and Interpretation of Computer Programs (Cambridge, Mass: MIT Press, 2010), xiii. ↩Abelson, xxiii. ↩Abelson, 428. ↩Helmers, 7. ↩Paul Graham, “What Made Lisp Different”, December 2001, accessed on October 14, 2018, http://www.paulgraham.com/diff.html . ↩John McCarthy, “Lisp—Notes on its past and future”, 3, Stanford University, 1980, accessed on October 14, 2018, http://jmc.stanford.edu/articles/lisp20th/lisp20th.pdf . ↩点击“理解更多”可访问文内链接