第2章人工智能程序设计语言课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第2章人工智能程序设计语言课件.ppt》由会员分享,可在线阅读,更多相关《第2章人工智能程序设计语言课件.ppt(150页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2章章 人工智能程序设计语言人工智能程序设计语言 第第2章章 人工智能程序设计语言人工智能程序设计语言 2.1 综述综述2.2 函数型程序设计语言函数型程序设计语言LISP 2.3 逻辑型程序设计语言逻辑型程序设计语言PROLOG 2.4 Turbo PROLOG程序设计程序设计第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.1 综述综述2.1.1函数型语言LISP是一种函数型程序设计语言。LISP程序由一组函数组成,程序的执行过程就是一系列的函数调用和求值过程。但LISP还不是纯函数型语言,准确地讲,它是基于-函数的语言。除LISP外,20世纪70年代J.Backus还提出
2、了一种称为FP的所谓纯函数型程序设计语言。但该语言现在还限于理论研究,实现上还存在一定困难。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.1.2逻辑型语言逻辑型程序设计语言起源于PROLOG(PROgramminginLOGic的缩写)。PROLOG语言首先由法国马塞大学的Colmerauer和它的研究小组于1972年研制成功,后来在欧洲得到进一步发展。特别是1981年日本宣布要以PROLOG作为他们正在研制的新一代计算机智能计算机的核心语言,更使PROLOG举世瞩目,迅速风靡世界。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 PROLOG语言是以Horn子句逻辑为
3、基础的程序设计语言,它是目前最具代表性的一种逻辑程序设计语言。早期PROLOG版本都是解释型的,1986年美国的Borland公司推出了编译型PROLOG-TurboPROLOG,并很快成为PC机上流行的PROLOG。现在运行在Windows环境下的可视化编程语言VisualPROLOG也已面世。但这些PROLOG语言版本属顺序逻辑程序设计语言。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.1.3面向对象语言20世 纪 80年 代 以 来,面 向 对 象 程 序 设 计(ObjectOrientedProgramming,简称OOP)异军突起,发展迅速,如今已日渐成熟,并越来越
4、流行起来。面向对象程序以其信息隐蔽、封装、继承、多态、消息传递等一系列优良机制,大大改善了软件的复杂性、模块性、重用性和可维护性,有望从根本上解决软件的生产效率问题。另一方面,由于面向对象程序设计的类、对象、继承等概念,与人工智能特别是知识表示和知识库产生了天然的联系。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 因而,现在面向对象程序设计语言也成为一种人工智能程序设计语言,面向对象程序设计也被广泛引入人工智能程序设计,特别是知识工程、专家系统程序设计。面向对象程序设计语言也种类繁多,已发展成为一个大家族。其中最纯正、最具面向对象风格的语言当推Smalltalk,而最流行的OOP语
5、言是C+,Java则是适于网络(Internet)环境的一种面向对象语言。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.1.4混合型语言以上三种语言都各有所长,但也都有其不足之处。为了扬长避短,于是便出现了基于这三种语言的混合型语言。1.函数型与逻辑型相结合的语言函数型与逻辑型语言的结合方式有耦合型和统一型两类。统一型又可分为具有归结语义的函数型语言和集成式语言两个子类。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.函数型与面向对象相结合的语言在LISP语言的基础上再扩充面向对象机制而产生的语言,称为函数型的面向对象程序设计语言(亦称为面向对象的LISP)。3.
6、逻辑型与面向对象相结合的语言第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.2 函数型程序设计语言函数型程序设计语言LISPLISP语言的主要特点是:(1)LISP程序由一组函数组成,程序的执行过程是函数的调用过程。(2)程序和数据在形式上是相同的,即都是符号表达式,简称为S表达式。(3)递归是LISP语言的主要控制结构。(4)程序以交互方式运行。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.2.1LISP的程序结构与运行机制LISP的程序一般由函数的定义和函数的调用两部分组成。其一般格式为:(DEFUN()(WB)()()()()第页第第2章章 人工智能程序设计
7、语言人工智能程序设计语言 其中的“DEFUN”是定义函数的关键字,“函数名”可以是系统的内部函数(名),也可以是用户用DEFUN定义的函数(名)。例如下面就是一个LISP程序。(DEFUNHANOI(abcn)(COND(=n1)(MOVE-DISKac)(T(HANOIacb(-n1)(MOVE-DISKac)(HANOIbac(-n1)第页第第2章章 人工智能程序设计语言人工智能程序设计语言(DEFUNMOVE-DISK(fromto)(TERPRI)(PRINCMoveDiskFrom)(PRINCfrom)(PRINCTo)(PRINCto)(HANOIabc3)第页第第2章章 人工智
8、能程序设计语言人工智能程序设计语言 2.2.2S表达式从语法上看,LISP程序的基本单位是S表达式。S表达式又可分为原子和表两大类。原子(atom)是由字母和数字组成的字符串,是S表达式的最简单情况。原子又可分为文字原子、串原子和数字原子三种。文字原子又称符号(symbol),是以字母开头的字母数字串,用来表示常量、变量和函数的名字等。例如:ABC、X1等。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 串原子是由双引号括起来的一串字符。如LISPProgram。数字原子由数字串组成。在其前面可以有符号“-”或“+”,中间可出现“.”,用来表示整数和实数。例如:256、-66、3.1
9、4159等。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 S表达式可以递归定义如下:(1)原子是S表达式。(2)若S1和S2是S表达式,则(S1S2)也是S表达式。由定义,下面的式子都是S表达式:X2123(AB)(A(BC)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 表(list)是LISP语言中最常用的数据类型,也是主要的处理对象。表是由圆括号括起来的由空格分开的若干个元素的集合。表的一般形式为:()第页第第2章章 人工智能程序设计语言人工智能程序设计语言 例如:(XYZ),(+12),(A(BC)左括号后面的第一个元素称为表头,其余的元素组成的表称为表尾。例如,
10、对于表(+12)的头为+,尾为(12)。特别地,元素个数为零的表为空表,记为()或NIL。表是一种特殊的S表达式,每一个表都对应着一个S表达式。二者的关系由下面的例子说明。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 表S-表达式(A)(ANIL)(AB)(A(BNIL)(ABC)(A(B(CNIL)(AB)CD)(A(BNIL)(C(DNIL)可以看出,表的S表达式的结构实际是一棵二叉树。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.2.3基本函数LISP的函数都以表的形式出现,并一律使用前缀表示方式,即表头为函数名,并且每个函数都有一个返回值。LISP的函数可分
11、为语言自身提供的内部函数(称为基本函数或系统函数)和用户自定义函数两类。基本函数的种类有十多个,下面仅给出其中主要的几类。1.表处理函数表处理是LISP的主要特色,表处理的函数也很多,下面仅给出最常用的几个。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 1)CAR函数格式(CAR)其中CAR为函数名,它是一个保留字(下同)。功能取出表中的表头。例如:(CAR(LISPLanguageProgram)返回值为:LISP第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2)CDR函数格式(CDR)功能取出表中的表尾。例如:(CDR(LISPLanguageProgram)返回值
12、为:(LanguageProgram)3)CONS函数格式(CONS)功能将S表达式作为一个元素加到表中去,并作为所构成新表中的第一个元素。例如:(CONSMy(LISPLanguageProgram)返回值为:(MyLISPLanguageProgram)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 4)APPEND函数格式(APPEND)功能将n个表中的元素合并成一个新表。例如:(APPEND(TIGERLION)(DOGCAT)返回值为:(TIGERLIONDOGCAT)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 5)LIST函数格式(LIST)功能把n个S表达
13、式作为元素括在一起构成一张新表。例如:(LISTYELLOWREDBLUE)返回值为:(YELLOWREDBLUE)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.算术函数LISP的算术表达式也是用函数表示的,称为算术函数。下面我们仅举例说明。(+25)表示2+5,返回值为7。(-(*48)(/105)表示48-10/5,返回值为30。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 3.求值与赋值函数在上面的函数中多次出现撇号,它的意思是禁止求值。为什么要禁止求值呢?原来,LISP总是试图对一切S表达式求值。表的值是通过函数运算而得到的,原子的值则是通过赋值函数实现的。
14、撇号也是一个函数,它实际是禁止求值函数QUOTE的简写形式。赋值函数有多个,其中SET函数是一个最基本的赋值函数。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 格式(SET)功能把S表达式赋给变量。例如:(SETX8);X得到值8(SETY(abc);Y得到值(abc)(SETZ(CDRY);Z得到值(bc)另外,赋值函数还有SETQ、SETF(COMMONLISP),其功能是类似的。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 4.谓词函数返回值为逻辑值真或假的函数称为谓词函数,简称谓词。LISP中真和假分别用T和NIL表示,当函数的返回值为非NIL时,也表示为真。另
15、外,NIL也表示空表。谓词函数也有多个,下面我们仅给出常用的几个。第页第第2章章 人工智能程序设计语言人工智能程序设计语言(1)原子谓词ATOM格式(ATOM)功能检测其参数是否为原子,是则返回T,否则返回NIL。例如:(ATOMa);返回T(ATOM(ab);返回NIL第页第第2章章 人工智能程序设计语言人工智能程序设计语言(2)相等谓词EQUAL格式(EQUAL)功能判断两个参数是否逻辑相等。例如:(EQUALaa);返回T(EQUAL(ab)(ac);返回NIL(EQUAL(ab)(CONSa(b);返回T还有一种相等谓词,其格式为:(EQ),但它只是用来判断两个原子是否相等。例如:(E
16、Qaa),则返回T第页第第2章章 人工智能程序设计语言人工智能程序设计语言(3)判空表函数NULL格式(NULL)功能判断参数是否为空表,是则返回T,否则返回NIL。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 5.条件函数条件函数也称分支函数,类似于其他语言中的分支语句,其作用是控制程序的流程。格式(COND(P1e1)(P2e2)(Pnen)其中Pi(i=1,.,n)为谓词,ei(i=1,.,n)为一个或多个S表达式。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 功能如果P1为真,则COND函数的值为e1(当e1为多个S表达式时,取最后一个S表达式的值,下同)。否则
17、,判断P2,直到某个Pi真为止,然后将对应的ei作为函数值。若没有一个Pi的值为非NIL,则COND的返回值为NIL。特别地,Pi也可以为逻辑常量T,这时则对其对应的各表达式求值,并把最后一个表达式的值作为COND的返回值。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 例如:(COND(NULLx)0)(ATOMx)1)(LISTPx)(LENGTHx)其语义是,若x的值为NIL,则COND的返回值为0;若x为原子,则COND的返回值为1;若x的值为表,则COND的返回值为表的长度。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.2.4自定义函数基本函数是LISP提供
18、的基本处理功能,要用LISP编程解决实际问题,仅有基本函数还是不够的,用户还必须根据问题的需要,利用基本函数自定义所需的函数。自定义函数的格式为:(DEFUN()第页第第2章章 人工智能程序设计语言人工智能程序设计语言 其中函数体,又可能是用户自定义的函数或LISP基本函数的某种组合。所以,一般来讲,LISP自定义函数就是由其基本函数组合而成的。常用的组合方法有复和、分支、递归、迭代等。其中最具特色的构造方法是递归。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 例2.1定义求N!的LISP函数。阶乘的公式是n!n(n-1)!1!10!1由此我们给出其LISP函数如下:(DEFUNN
19、!(n)(COND(=n0)1)(=n1)1)(T(*n(N!(-n1)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 可以看出,该函数的最后一行中又调用了它自己。所以,这个函数N!是递归定义的。需说明的是,一个函数是否能递归定义,要取决于以下两条:(1)函数的求值存在最简的情形,在这种情形下函数值是显然的或已知的;(2)该函数对于其参数的求值,可以归结为对另一些参数的求值,而且后者比前者更容易求值,即使问题朝最简情形逼近了一步。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.2.5程序举例例2.2符号微分程序。这里是指数学上的一元函数求导。我们用D(ex)表示数学上的
20、de/dx,这里e为需求导的函数表达式,x为自变量。程序如下:(DEFUND(ex)(COND(ATOMe)(IF(Eqex)10)(T(APPLY(D-RULE(CARe)(APPEND(CDRe)(LISTx)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 其中D-RULE是一个获取给定操作符的微分规则的LISP函数。微分规则的存放,是通过为相应操作符建立d特性的方法完成的。D-RULE的定义为(DEFUND-RULE(operator)(GEToperatord)其中操作符d的特性值需事先用SETF函数建立好。例如对于操作符加和乘,在数学上有d(uv)/dxdu/dxdv/dx
21、d(uv)/dxvdu/dxudv/dx第页第第2章章 人工智能程序设计语言人工智能程序设计语言 用LISP表示就是(SETF(GET+D)(LAMBDA(uvx)(+,(Dux),(Dvx)(SETF(GET*D)(LAMBDA(uvx)(+(*,(Dux),v)(*,(Dvx),u)第页第第2章章 人工智能程序设计语言人工智能程序设计语言 有了这些函数,我们就可以用机器求符号微分了。例如,给出如下的函数调用(D(+(*2x)(*xx)x);即求一元函数2x+x2关于x的导函数则得到返回值为(+(+(*0 x)(*12)(+(*1x)(*1x)即2+2x,结果正确。第页第第2章章 人工智能程
22、序设计语言人工智能程序设计语言 由于篇幅所限,上面我们对LISP语言仅做了简要介绍。需进一步学习的读者,可参阅有关专门著作。实际上,以此为入门和基础,读者就可以参照某一具体的LISP语言资料,进行LISP程序设计了。经过30多年的发展,LISP的方言和版本也很多。目前比较流行的有INTERLISP、MACLISP、COMMONLISP。其中COMMONLISP将成为一种标准,以统一各种LISP方言。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.3 逻辑型程序设计语言逻辑型程序设计语言PROLOG 2.3.1PROLOG的语句PROLOG语言只有三种语句,分别称为事实、规则和问题
23、。1.事实(fact)格式().其中谓词名是以小写英文字母打头的字母、数字、下划线等组成的字符串,项表是以逗号隔开的项序列。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 PROLOG中的项包括由常量或变量表示的简单对象以及函数、结构和表等,即事实的形式是一个原子谓词公式。例如:student(john).like(mary,music).就是PROLOG中的两个合法事实。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 功能一般表示对象的性质或关系。例如上面的两个事实就分别表示“约翰是学生”和“玛丽喜欢音乐”。作为特殊情形,一个事实也可以只有谓词名而无参量。例如:abc.r
24、epeat.等也是允许的。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 2.规则(rule)格式():-(),().其中“:-”号表示“if”(也可以直接写为if),其左部的谓词是规则的结论(亦称为头),右部的谓词是规则的前提(亦称为体),表示零次或多次重复,逗号表示and(逻辑与),即规则的形式是一个逻辑蕴含式。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 例如:bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).就是PROLOG的合法规则。第页第第2章章 人工智能程序
25、设计语言人工智能程序设计语言 功能一般表示对象间的因果关系、蕴含关系或对应关系。例如,上面的第一条规则就表示“如果X是动物,并且X有羽毛,则X是鸟”;第二条规则就表示“X是Y的祖父,如果存在Z,X是Z的父亲并且Z又是Y的父亲”。作为特殊情形,规则中的谓词也可以只有谓词名而无参量。例如:run:-start,step1(X),step2(X),end.也是一个合法规则。第页第第2章章 人工智能程序设计语言人工智能程序设计语言 3.问题(question)格式?-(),().例如:?-student(john).?-like(mary,X).就是两个合法的问题。功能问题表示用户的询问,它就是程序运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 程序设计语言 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内