Lisp之父约翰•麦卡锡——不走寻常路的常识逻辑学家

麦卡锡认为自己的青少年时期平淡无奇,但事实证明并非如此。在上高三时,他得到了一份加州理工学院的课程目录,查看了该校一年级和二年级的微积分课本。他买了这些书,完成了所有的练习题目。这使得他最终在1944年进入加州理工后得以免修头两年的数学课程。

  1948年,麦卡锡开始攻读数学系的硕士学位。同年9月他参加了加州理工主办的希克森脑行为机制研讨会,大数学家、计算机设计大师约翰 · 冯 · 诺依曼在会上演讲了一篇关于自复制自动机(self-replicating automaton)的论文,这是一种可以对自身进行复制的机器。尽管当时的与会人员并没有明确地将机器智能与人类智能联系起来,但冯 · 诺依曼的讲话却激发了麦卡锡的好奇心。

  1949年在普林斯顿大学数学系作博士论文时,麦卡锡首次开始尝试在机器上模拟人类智能。

【我把有智能的东西看做是一个有限自动机,与同样是有限自动机的环境相连。我和约翰 · 冯 · 诺依曼见了面,他对此非常赞成,敦促我一定要把这篇论文写出来。但最后我并没有把这篇论文写出来,因为我当时认为它还不够成熟。】

  “自动机”模拟的是随着时间从一个状态转入另一个状态的机器。比如说,普通的手动变速箱汽车在驾驶员点火启动之后会从“熄火”状态转入“空挡但启动”状态。如果驾驶员挂挡前进则转入“启动且挂一挡”状态。而“交互式自动机”(interacting automaton)则是根据其自身的状态以及它所观察到的其他自动机的状态决定从某个状态转入另一状态。有些自动机是智能的(可看做是自带驾驶员),但并不是必须智能。交互式自动机试图在这两种类型之间建立一种连续性的统一体。

  麦卡锡放弃了自己对利用自动机模拟人类智能的首次尝试。但在十几年之后,当他从事情境演算(situational calculus)方面的工作时,有关于状态和状态转换的思想将重新浮出水面。

  在这段时间中,麦卡锡始终没有放弃制造一台像人类那样智能的机器这一想法。1952年夏,普林斯顿大学的一个研究生杰里 · 雷纳(Jerry Rayna)向麦卡锡建议,可以找一些对机器智能感兴趣的人去收集一些该领域的文章。麦卡锡找的第一批人之一就是克劳德 · 香农 ,“信息论”亦即通信数学理论的发明者。香农的理论最初用于远程通信,后被广泛用于语言学、数学以及计算机科学等领域。

【香农不喜欢华而不实的术语堆砌。他整理的卷宗为《自动机研究》(Automata Studies)。而其中收集到的文章让我很失望。其中有关智能的内容并不多。所以在1955年开始筹备达特茅斯计划时,我希望开门见山,使用了“人工智能”这一术语,目的是让参与者们弄清楚我们是在干什么。】

  1956年在达特茅斯学院举办的夏季人工智能研讨会是计算机科学史上的一座里程碑。这项涉及10人、耗时2个月的雄心勃勃的研究计划,其目标是(引自其提案)“基于‘我们能够精确、全面地描述人类智能中的学习以及其他特征、并制造出机器对其模拟’这一构想,继续阔步前进”。

  研讨会的四位组织者——麦卡锡、马文 · 明斯基 (当时还在哈佛大学)、纳撒尼尔 · 罗切斯特 (IBM的杰出计算机设计师)和香农——向洛克菲勒基金会申请了一笔资金支持,金额在今天看来几乎少得可怜:主要组织者每人1200美元,再加上“外地与会人员的交通费”,总共7500美元。

  麦卡锡在提案中写到,他将研究语言和智能二者间的关系,希望能通过程序计算机能“进行棋类游戏、并完成其他任务”。时隔40年后回忆起这次研讨会时,麦卡锡以他特有的直率形容了自己当时的愿景和期望。

  通过表来进行逻辑推理的优点在于,在推理的过程中表可以扩展、收缩和重组。此外,我们可以用同一种形式表示规则和数据。在研讨会大多数与会者们看来,表操作无疑是这次的赢家。达特茅斯会议的另一项成就是马文 · 明斯基关于构建几何定理证明机的提案。明斯基在纸上试验了几个例子,认为证明几何定理可能是对纽厄尔和西蒙提出的基于规则的方法的,一种很好的应用。IBM公司的赫伯特 · 格林特(Herbert Gelernter)和纳撒尼尔 · 罗切斯特决定去实现这个程序。格林特日后又开发了一种帮助有机化学家合成新化合物的工具,他的儿子大卫 · 格林特(David Gelernter)是并行程序设计和医学人工智能领域著名的研究者及设计者。麦卡锡身为这个定理证明项目的顾问,有机会为智能行为编写程序。

【格林特和他的助手卡尔 · 格贝里希(Carl Gerberich)采纳了我的建议,以Fortran为蓝本设计了FLPL——Fortran表处理语言(Fortran List Processing Language)。其中也加入了一些他们自己的想法。】

  1956年,约翰 · 巴科斯和他在IBM的团队发布了首个高级编程语言Fortran,将从事数字运算的程序员从为每一台计算机写汇编语言中解放出来。直到今天,Fortran仍然是科学和工程计算中的通用语言。FLPL首次尝试了扩展Fortran的符号操作能力。1958年夏天在IBM工作时,麦卡锡试图用FLPL为自己在高中时常用的代数微分应用写一个表程序,但很快发现需要用到递归条件表达式 ,而Fortran却不支持递归。

【如果Fortran支持递归,我就能用FLPL做下去。我甚至也考虑了如何往Fortran中加入递归的问题,但是那样做过于复杂。】

  事实证明,IBM很快就失去了对人工智能的兴趣。一些客户认为智能机器可能会威胁到他们的工作岗位,因此20世纪60年代初期的IBM市场营销都把计算机说成是非智能的快速运算设备,百依百顺、只按要求行事。

  麦卡锡不再纠缠于修补Fortran,而是转头发明了Lisp。纽厄尔、肖和西蒙后来把IPL形容为一种越变越复杂的语言,而麦卡锡则把他的Lisp形容为一种越变越简单的语言。

  “Lisp”是“list processing language”(表处理语言)的缩写。确如其名,Lisp中所有的数据都用表来表示。这些表都被包含在圆括号中。比如说,(Robert taught Dennis)可能就是表示“罗伯特教丹尼斯”这个句子的一个表。在这种情况下,顺序是很重要的,因为它指明了是谁在教谁。

  而(apple tomato milk)则可能表示一个购物清单。在这种情况下,顺序就不重要了,因为这三种商品可以按任意顺序购买。上述这两个例子中,表都包含了“原子”(atom)作为元素。原子和表不同,是Lisp中最小的符号单位,不包含其他任何组成部分。而表还能够包含(而且一般都会包含)其他表作为组成部分。比如说,(Robert taught (Carol and Dennis))反映了句子的语法结构,其中的圆括号指明卡罗尔和丹尼斯都是动词“教”的对象。再比如,(times 6 (plus x y))表示6 × (x + y)。这里的顺序也很重要,而且圆括号表明x和y是一起的。

  通过这种方式,表不仅能够表示构成科学和工程的标准数学结构,还能表示构成语言的语句结构。

  

 

posted on 2012-11-16 23:23  八千米海岸七厘米蔚蓝  阅读(607)  评论(0编辑  收藏  举报

导航