home.jpg (8189 bytes) back.jpg (5915 bytes)  forward.jpg (5884 bytes)
第二章:LISP语言程序设计
  2.1 人工智能语言
    2.1.3 人工智能语言
tigrrr.gif (11274 bytes)

     在人工智能的研究发展过程中,从一开始就注意到了人工智能语言问题。人工智能发展的初期,人工智能语言就得到了研究和开发。实际上四十多年来有一百来种人工智能语言先后出现过,但很多都被淘汰了。它们大抵有三个来源。第一个来源是计算机科学家们对可计算性理论的研究。例如,LISP语言是为处理人工智能中大量出现符号编程问题而设计的,它的理论基础是符号集上的递归函数论。已经证明,用LISP可以编出符号集上的任何可计算函数。Prolog语言是为处理人工智能中也是大量出现的逻辑推理问题(首先是为解决自然语言理解问题)而设计的。它的理论基础是一阶谓词演算(首先是它子集Horn子句演算)的消解法定理证明,其计算能力等价于LISP。OPS5面对的问题也是逻辑推理。不过PROLOG是向后推理,OPS5是向前推理。OPS5的理论基础是Post的产生式系统,其计算能力也等价于LISP。第二个来源是认知科学的研究成果。人们研究出各种各样的认知模型,并为这些模型设计相应的知识表示语言。例如产生式表示、框架表示、语义网络表示等实际上都有其认知模型作为背景。如上所述的OPS5是产生式表示的语言,SRL、FRL、FEST等是框架语言,概念图和SNetI都是语义网络表示语言。面向对象的程序设计是在SIMULA中的类程和Minsky的框架表示两种思想融合的基础上发展起来的(它适用于计算机软件的所有领域,不只是人工智能)。

home.jpg (8189 bytes)  back.jpg (5915 bytes)  forward.jpg (5884 bytes) 

    近年来出现了具有人工智能特色面向对象程序设计,称为面向主体(Agent,亦称活体)程序设计。往一个对象中增加更多的智能,使它能根据环境的变化进行推理并规划自己的行为,就得到主体(Agent)。主体概念符合Minsky提出的“意念社会”认知模型,特别适用于分布环境。经典的面向对象程序设计语言是Smalltalk,面向主体的程序设计语言也已经有了一些,如OZ等,但还没被大家公认和普遍采用。也有基于PDP认知模型(Parallel Distributed Processing)的神经网络语言。第三来源是知识工程的实际需要。例如,为了开发各种领域的专家系统而设计的包含不精确推理或不确定推理功能,甚至包含多种不同推理机制的AI语言,例如Loops和TUILI。还有的是看到某一个专家系统做得比较成功,干脆抽去它的领域知识,留下它的表示方法,也成为一种语言,俗称专家系统外壳。例如,抽去医学专家系统MYSIN的领域知识就得到一个外壳语言Emycin。

home.jpg (8189 bytes)  back.jpg (5915 bytes)  forward.jpg (5884 bytes) 
    在人工智能手册中介绍了七种人工智能语言:LISP,PLANNER,CINNIVER,QLISP,POP-2,SAIL,FUZZY。近百种人工智能语言中,只有LISP和后起之秀Prolog是人工智能研究和应用中占重要地位的两种人工智能程序设计语言。虽然国内外对这两种AI语言曾有争议,褒贬不一,但LISP和PROLOG的重要性是都不可否认的。
    谈到LISP和PROLOG两种AI语言的重要性,我们可以从美国AI界的权威学者、麻省理工学院教授P.H.Winston(温斯顿)所说的三段话来体会:

(1)温斯顿认为,LISP 语言是AI的数学,不仅对AI的机器实现有重要意义,而且是AI理论研究的重要工具。

(2)“在中世纪,拉丁文和希腊文的知识对所有学者来说,都是必不可少的。只懂一种语言的学者必然是一个残缺不全的学者,他缺乏从两个方面来观察世界所获得的那种理解力。同样地,现代的AI专业人员如果不能同时大致通晓LISP和Prolog,也犹如一个残疾人,因为就广义来说,这两种人工智能的主要语言的知识都是必不可少的。
“我一直热衷于Lisp,Lisp是在MIT被制造并且在那儿成长起来的。”

home.jpg (8189 bytes)  back.jpg (5915 bytes)  forward.jpg (5884 bytes)

(3)概括地说,计算机语言的发展正是一个从HOW型低级语言向WHAT型高级语言进化的过程.在HOW型语言中,程序编制者必须详细说明运算是怎样(HOW)一步一步进行的;而在WHAT型语言中,程序编制者只需简单说明要做的事情是什么(WHAT) 。 现代的LISP语言是这些语言的佼佼者,因为采用Common Lisp格式的Lisp具有非凡的表现力,但是如何做某件事情仍然是有待于Lisp程序编制者来表达的东西.相反,Prolog是一种明显地冲破了HOW型语言陈规的语言, 它鼓励程序编制者去描述情况和问题,而不是那些用来解决问题的详细步骤。

    (注:引自《应用于人工智能的PROLOG程序设计》P.H.温斯顿 1986年1月的 。该书为[南斯拉夫]I.布拉特科著,夏莹,陈群秀译,黄昌宁校,科学出版社,1991年8月第1版。)
    由以上论述可以看出LISP语言和Prolog语言对人工智能学科和人工智能学者的重要性。
    一般来说,LISP可以称为人工智能的汇编语言, Prolog是人工智能更高级的语言。

tigrrr.gif (11274 bytes)