《人工智能程序设计语言.ppt》由会员分享,可在线阅读,更多相关《人工智能程序设计语言.ppt(69页珍藏版)》请在第壹文秘上搜索。
1、人工智能程序设计语言人工智能程序设计语言2023-3-202内容内容 综述 函数型程序设计语言LISP 逻辑性程序设计语言PROLOG PROLOG程序设计2023-3-203内容内容 综述 函数型程序设计语言LISP 逻辑性程序设计语言PROLOG PROLOG程序设计2023-3-204综述综述 人工智能所解决的问题 并非一般的数值计算或数据处理问题 是要实现对脑功能的模拟和再现 人工智能程序 面向问题 面向逻辑 支持知识表示 能描述逻辑关系和抽象概念 处理对象更多的是知识,或者说是符号 常规程序设计语言受限2023-3-205综述综述 人工智能程序设计语言 函数型语言 逻辑性语言 面向对
2、象语言 混合型语言2023-3-206综述综述-函数型语言函数型语言 函数型语言 LISP是一种函数型程序设计语言。LISP程序由一组函数组成,程序的执行过程就是一系列的函数调用和求值过程。但LISP还不是纯函数型语言,准确地讲,它是基于-函数的语言。除LISP外,20世纪70年代J.Backus还提出了一种称为FP的所谓纯函数型程序设计语言。但该语言现在还限于理论研究,实现上还存在一定困难。2023-3-207综述综述-逻辑型语言逻辑型语言 逻辑型语言 逻辑型程序设计语言起源于PROLOG (PROgramming in LOGic)。 PROLOG语言首先由法国马塞大学的Colmeraue
3、r和它的研究小组于1972年研制成功,后来在欧洲得到进一步发展。特别是1981年日本宣布要以PROLOG作为他们正在研制的新一代计算机智能计算机的核心语言,更使PROLOG举世瞩目,迅速风靡世界。2023-3-208综述综述-逻辑型语言逻辑型语言 现在PROLOG几乎在人工智能的所有领域都获得了应用, 成为与LISP并驾齐驱的甚至更加流行的智能程序设计语言。 由于PROLOG语言是一种逻辑型程序设计语言, 因此用它编写的程序也就是逻辑程序,即在PROLOG程序中一般不需告诉计算机“怎么做”, 而只需告诉它“做什么”。因此,PROLOG亦属陈述性语言。与通常的过程性程序设计语言相比, PROLO
4、G是更高级的语言。2023-3-209综述综述-面向对象语言面向对象语言 面向对象语言面向对象语言 20世纪80年代以来,面向对象程序设计(ObjectOrientedProgramming,简称OOP)异军突起,发展迅速。OOP以其信息隐蔽、封装、继承、多态、消息传递等一系列优良机制,大大改善了软件的复杂性、模块性、重用性和可维护性,有望从根本上解决软件的生产效率问题。另一方面,由于面向对象程序设计的类、对象、继承等概念,与人工智能特别是知识表示和知识库产生了天然的联系。 2023-3-2010综述综述-混合型语言混合型语言 混合型语言混合型语言 1. 函数型与逻辑型相结合的语言函数型与逻辑
5、型相结合的语言 函数型与逻辑型语言的结合方式有耦合型和统一型两类。 统一型又可分为具有归结语义的函数型语言和集成式语言两个子类。 耦合型语言意为将具有归约语义的函数型语言和具有归结语义的逻辑型语言组合在一起, 并在二者之间提供一个接口而形成的一种混合型语言。 其典型代表有: 2023-3-2011综述综述-混合型语言混合型语言 (1) LOGLISP。该语言在LISP的基础上增加了表达合一、 回溯等机制的系统函数,从而在保持LISP特色的同时又有了逻辑程序设计能力。 (2) FUNLOG。该语言在 PROLOG 之外又增加了函数定义机制, 系统以归结语义执行PROLOG程序, 以归约语义求解函
6、数。 (3) POPLOG。这是POP-11、PROLOG和LISP的混合型语言, 三种成分各有一个增量式编译器。具有归结语义的函数型语言又可分为N-语言、F-语言和R语言。2023-3-2012综述综述-混合型语言混合型语言2. 函数型与面向对象相结合的语言函数型与面向对象相结合的语言 在LISP语言的基础上再扩充面向对象机制而产生的语言, 称为函数型的面向对象程序设计语言(亦称为面向对象的LISP)。 这种语言现已成为一个家族, 其中比较著名的有: (1) Flavors 由 MIT 的 Lisp Machine 小组于 1979 年研制而成, 它的基语言是Symbolics Common
7、 LISP。 (2)LOOPS(Lisp-Object-OrientedProgramming System )。它是在InterLisp-D环境上实现的基于LISP的OOP语言, 由Xerox公司于1983年推出。 2023-3-2013综述综述-混合型语言混合型语言 (3) CommonLoops。 它是基于CommonLisp的函数型OOP语言, 由Xerox公司于1985 年推出。 (4) CLOS (CommonLisp Objetc System)。它是Xerox公司于1986 年推出的一个CommonLoops与New Flavors的后继产品。 (5) CommonObject
8、s。它是由HP公司于19831985年实现的又一个基于CommonLisp 的OOP语言。 (6) OBJ2 也是一种面向对象的函数型语言。 2023-3-2014综述综述-混合型语言混合型语言3. 逻辑型与面向对象相结合的语言逻辑型与面向对象相结合的语言 这类语言著名的有: (1) SPOOL。日本IBM分部于1985年推出的以面向对象思想扩充的PROLOG语言。 (2) Orient 84K。Keio大学于1984年发表的基于PROLOG和Smalltalk 的并行执行语言。 (3) Vulan。 一种面向对象的逻辑型语言。2023-3-2015内容内容 综述 函数型程序设计语言LISP
9、逻辑性程序设计语言PROLOG PROLOG程序设计2023-3-2016函数型程序设计语言函数型程序设计语言LISP LISP是第一个人工智能程序设计语言 LISt Processing,表处理语言 1960年由MIT的麦卡锡和他的研究小组设计,擅长表处理,即符号处理 许多人工智能系统用LISP语言编写 LISP被誉为人工智能的数学,是人工智能研究和开发的主要工具2023-3-2017函数型程序设计语言函数型程序设计语言LISP LISP语言的主要特点: LISP程序由一组函数组成,程序的执行过程是函数的调用过程 程序和数据在形式上是相同的,即都是符号表达式,简称为S表达式 递归是LISP语
10、言的主要控制结构 程序以交互方式运行2023-3-2018LISP的程序结构的程序结构LISP的程序一般由函数的定义和函数的调用两部分组成。其一般格式为: (DEFUN() () () () () ()“DEFUN”是定义函数的关键字“函数名”可以是系统的内部函数(名), 也可以是用户用DEFUN定义的函数(名)2023-3-2019一个一个LISP程序程序(DEFUN HANOI (a b c n) (COND (= n 1) (MOVE-DISK a c) (T (HANOI a c b (- n 1) (MOVE-DISK a c) (HANOI b a c (- n 1) (DEFUN
11、 MOVE-DISK(from to) (TERPRI) (PRINC Move Disk From) (PRINC from) (PRINC To) (PRINC to) (HANOI abc 3) 两个函数前者调用后者函数调用部分只有一个函数调用2023-3-2020LISP的基本函数的基本函数 LISP的函数一律使用前缀表示方式,分为内部函数(基本或系统函数)和用户自定义函数两类 基本函数的种类有十多个,仅给出主要的几类 表处理函数 算数函数 求值与赋值函数 谓词函数 条件函数2023-3-2021表处理函数表处理函数 表处理是LISP的主要特色,下面仅给出最常用的几个:1) CAR函数
12、功能取出表中的表头。如CAR(LISP Language Program)返回值 LISP2) CDR函数 功能 取出表中的表尾 如 (CDR(LISP Language Program) 返回值 (Language Program)2023-3-2022表处理函数表处理函数3) CONS函数 功能 将S表达式作为表头加到表中去 如 (CONSMy(LISP Language Program) 返回值 (My LISP Language Program)4) APPEND函数功能 将n个表中的元素合并成一个新表如(APPEND(TIGER LION)(DOG CAT)返回值 (TIGER LI
13、ON DOG CAT)5) LIST函数功能把n个S表达式作为元素构成一张新表如(LISTYELLOWREDBLUE)返回值 (YELLOW RED BLUE) 2023-3-2023算术函数算术函数 LISP的算术表达式也是用函数表示的,称为算术函数 举例说明 (+2 5)表示2+5,返回值为7 (-(*4 8)(/10 5)表示48-10/5,返回值为302023-3-2024求值与赋值函数求值与赋值函数 撇号 是禁止求值函数QUOTE的简写形式 赋值函数有多个 SET函数是最基本的一个功能把S表达式赋给变量例如: (SETX8); X 得到值8 (SETY(a b c); Y 得到值(a
14、 b c) (SETZ(CDRY); Z 得到值(b c)2023-3-2025谓词函数谓词函数 返回值为逻辑值真或假的函数称为谓词函数 真和假分别用T和NIL表示 谓词函数也有多个,仅给出常用的几个:(1) 原子谓词ATOM 功能检测其参数是否为原子,是则T,否则NIL 例如: (ATOMa);返回T (ATOM(a b);返回NIL 2023-3-2026谓词函数谓词函数 (2) 相等谓词EQUAL 功能判断两个参数是否逻辑相等 例如: (EQUALaa); 返回T (EQUAL(a b)(a c); 返回NIL (3)判空表函数NULL 功能判断参数是否为空表,是则返回T,否则返回NIL
15、2023-3-2027条件函数条件函数 条件函数类似于分支语句,其作用是控制程序的流程 格式 (COND(P1 e1) (P2 e2) (Pn en) 其中Pi(i=1,.,n)为谓词,ei(i=1,.,n)为一个或多个S表达式 功能功能如果P1为真,则COND函数的值为e1。否则,判断P2,直到某个Pi真为止,然后将对应的ei作为函数值。若没有一个Pi的值为非NIL,则COND的返回值为NIL。特别地,Pi也可以为逻辑常量T,这时则对其对应的各表达式求值,并把最后一个表达式的值作为COND的返回值 2023-3-2028条件函数条件函数例如: (COND(NULL x)0) (ATOM x)
16、1) (LISTP x)(LENGTH x) 其语义是,若x的值为NIL,则COND的返回值为0;若x为原子,则COND的返回值为1;若x的值为表,则COND的返回值为表的长度2023-3-2029自定义函数自定义函数 自定义函数的格式为: (DEFUN() ) 其中函数体,又可能是用户自定义的函数或LISP基本函数的某种组合2023-3-2030例例 定义求定义求N!的的LISP函数函数阶乘的公式是 n!n(n-1)! 1!1 0!1其LISP函数如下: (DEFUNN!(n) (COND(=n 0)1) (=n 1)1) (T(* n(N!(- n 1)该函数的最后一行中又调用了它自己这个函数N!是递归定义的2023-3-2031例例 HANOI(DEFUN HANOI(a b c n)当只有一个盘子时,直接将a上的盘子移动到c上(COND(n 1)(MOVEDISK a c)其他情况,通过递归,先将柱a上的n1个盘子通过柱c移到柱b上(T(HANOI a c b( n 1)再将柱a上的一个盘子移动到柱c上(MOVEDISK a c)最后再通过递归,将柱b上的n1个盘子通过柱a移动