人工智能及专家系统第12章-Prolog语言及其程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《人工智能及专家系统第12章-Prolog语言及其程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 专家系统 12 Prolog 语言 及其 程序设计 课件
- 资源描述:
-
1、第12章 Prolog语言及其程序设计121 Prolog语言简介122 PDC Prolog数据结构和基本语句1221 常量与变量1222 三种基本语句123 PDC Prolog运算符与常用内部谓词1231 函数与运算符1232 输入与输出内部谓词1233 动态数据库内部谓词124 PDC PROLOG程序结构及其说明1241 程序结构1242 常量段说明1243 域类型说明1244 谓词与动态数据库说明1245 谓词与域类型说明示例1246 对象数据类型的转换 第12章 Prolog语言及其程序设计 125 PDC Prolog的基本搜索方法 1251 搜索与回溯 1252 失败回溯循环
2、法 1253 切断回溯控制循环法 1254 自定义的循环方法 1255 递归 126 PDC Prolog的数据处理 1261 表处理技术 1262 字符串处理 1263 文件处理 第12章 Prolog语言及其程序设计 127 PDC Prolog的多媒体技术 1271 窗口的建立及使用 1272 图形模式的设置与绘图 1273 声音的内部谓词及其应用 128 PDC PROLOG语言与C语言的连接 1281 语言条件 1282 外部谓词说明 1283 参数传递 1284 外部C语言子程序 129 Visual Prolog语言 1291 Visual Prolog语言简介 1292 Vis
3、ual Prolog的可视化开发环境及其使用 121 Prolog语言简介 Prolog(Programing in Logic)的第一个系统是1972年开发的。它是一种典型的逻辑型语言,又称描述性语言。又有人把Prolog称为面向目标的语言。应用 目前己广泛应用于关系数据库、抽象问题求解、数理逻辑、符号处理、定理证明、自然语言理解、专家系统以及人工智能的许多领域。主要版本 纯Prolog、Prolog、Arity Prolog、Wisdom Prolog、Micro Prolog、PDC(Turbo)Prolog、Dec-10 Prolog、MP Prolog、PDP-11 UNIX Pro
4、log、Quintus Prolog等等。PDC(Turbo)Prolog是1986年美国Borland International公司为IBM PC及其兼容微机研制的一种编译型Prolog系统,其1.0、2.0、2.1版本取名为Turbo Prolog,其新版本3.0、3.2版本更名为PDC Prolog。现在已研制出visual Prolog。Turbo Prolog的系统界面 PDC Prolog的重要特点 1运行速度快,内存要求小,2用户界面友好。3内部谓词丰富独特 4具有强大的图形功能。支持与Turbo C和Turbo Pascal同样的图形功能。5.集成式、模块化的程序开发环境,能
5、与C、Pascal、Fortran、汇编、dBASE 等语言实现自然和谐的联结,6.程序运行时,能自动地适应模式匹配、回溯和递归。程序接近于自然语言、文法简捷、逻辑性强、易写易读、便于学习使用、易于正确性证明。Visual Prolog Visual Prolog是基于Prolog语言的可视化集成开发环境,是PDC推出的基于Windows环境的智能化编程工具,也是一个可以制作界面的Prolog,已经推出版本4.x、5.x、6.x和7.x。它的基本Prolog语句同DOS下的Turbo Prolog相似,原DOS下的Prolog原程序也很容易移植。这个prolog版本需要对谓词以及数据进行声明,
6、就像C语言一样。因此在使用的时候比较复杂,不过更加适合编制较大的程序。Visual Prolog为编译型执行,运行速度比解释型Prolog快,原程序可编译为独立执行的可执行程序,也可发布为动态连接库供VB,VC,Delphi等调用,为开发者提供更灵活的组合开发方式。Visual Prolog具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等强大功能。它包含构建大型应用程序所需要的一切特性、图形开发环境、编译器、连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。122 PDC Prolog数据结构和基本语
7、句 1221 常量与变量 1.常量 常量是用来命名特定对象和特定关系的一种符号,它描述的对象是已知的或具体的。包括四个方面:整数和实数 用小写字母打头的由字母、数字(0,1,9)串、“_”下划线组成的串序列;复合对象(如sdudent(“张三”)表(如1,2,3,4,5);单引号内的单个字符或双引号内的任何字符。2.变量 定义:变量是用来代表某些尚不能命名的对象。类型:整数、实数、字符、串、符号、复合对象、表和匿名变量“_”。表示:变量名是以大写字母或“_”下划线打头的字母、数字(0,1,9)串序列,中间可插有“_”下划线。用单一的下划线(_)表示匿名变量。1222 三种基本语句 1 事实 事
8、实是用来说明一个问题中已知对象和它们之间关系存在的语句。一般形式为:关系名(对象1,对象2,对象n).关系名由小写字母和“_”下划线组成,并且用小写字母打头,关系名又称为谓词。对象,对象通常是常量,但也可以是谓词。2 规则 规则可分解为表示条件的单个前提谓词和表示结论的一个或多个后件谓词组合起来的。规则的一般形式为:P:-P1,P2,PN.sister(X,Y):-female(X),parents(X,F,M),parents(Y,F,M).“/*/”之间的内容用于解释说明,IF b0 THEN x:1 ELSE x:0.用Prolog实现则是 tjfz:bO,x1.tjfz:xO.类似地,
9、对于条件多分支,可以用多条同头的规则实现。例如:tjfz:bO,x1.tjfz:bO,x0.tjfz:bO,x-1.3 目标与询问 目标分为内部目标和外部目标两种 thief(john)./*约翰是小偷*/likes(paul,food)./*保罗喜欢食品*/likes(joule,sweets)./*焦耳喜欢甜食*/likes(john,X):-likes(paul,X)./*保罗喜欢的东西约翰也喜欢*/may_steal(X,Y):-thief(X),likes(X,Y)./*如果X是贼且喜欢Y,则X可能会偷Y*/,可以这样询问:goal:may_steal(john,What)Goal:
10、likes(paul,sweets)Goal:likes(WHO,food)Goal:likes(X,Y)Goal:likes(X,_)no solutionno solutionlWHOWHOpaulpaullWHOWHOjohnjohnl2 solution2 solutionlX Xpaulpaul,Y YfoodfoodlX Xjoulejoule,Y YsweetssweetslX Xjohnjohn,Y Yfood food l3 solution3 solutionlX XpaulpaullX XjoulejoulelX Xjohnjohnl3 solution3 solutio
11、n123 PDC Prolog运算符与常用内部谓词 1.Prolog函数 Abs(X)cos(X)sin(X)tan(X)arctan(X)exp(X)ln(X)log(X)sqrt(X)2 算术运算符及其表达式、*、/、div、mod 运算的顺序为:*、/、div、mod优先于、。同级从左到右按顺序运算,括号优先。算术表达式的形式与数学中的形式基本一样。例如:数学中的算术表达式 Prolog中的算术表达式 xe+yz X*exp(X)Y*Z absin xc/d A*B*sin(X)C/D u mod v U mod V(表示求U除以V所得的余数)i div j k=i div j(i、j、
12、k均为整数)3 关系运算符及其表达式 六种常用的关系运算,即小于()、小于等于()、等于()、大于()、大于等于()和不等于()。X1Y X1Y XY XY“”的用法比较特殊,它既可以表示比较,也可以表示约束值,12.3.2 输入与输出内部谓词 1 readln(X)2 readint(X)3 readreal(X)4 readchar(X)5 write(X1,X2,Xn)例如:write(computer,Prolog,Y,1992).6.display(X)该谓词与write(X)相似,只是它忽略运算符说明,以结构形式输出项。7 Nl,n也同样可起换行作用。例如,语句write(name
13、),nl,write(age).与语句write(name,n,age).的效果完全一样。12.3.3 动态数据库内部谓词1.asserta()该内部谓词表示插一个新事实(谓词)到具有同名谓词的所有动态事实之前。例如语句:asserta(cadre(张三,处长,21,2100.70).2.assertz()该内部谓词表示插一个新事实(谓词)到具有同名谓词的所有动态事实之后。例如语句:assertz(cadre(李四,局长,25,2579.86).3.retract()该内部谓词表示从动态数据库中删除一已存在的动态事实。例如语句retract(cadre(张三,处长,21,2100.70)4.s
14、ave(DOS_file_name)该内部谓词表示把内存中整个动态数据库存入一个正文文件(在磁盘中)。5.consult(DOS_file_name)该内部谓词表示把磁盘文件DOS_file_name的内容装入内存中的动态数据库。例如:consult(dycadre.dba).124 PDC Prolog程序结构及其说明 1.程序结构/*注 释 */constants /*指定具体的常数*/domains /*说明各类对象的类型*/database /*说明用于动态数据库的自定义谓词*/predicates /*说明程序中使用的自定义谓词*/goal /*说明程序的目的*/clauses /*
15、程序的主体,由事实和规则组成*/2.域类型说明 类型名标识符取值范围 字符型char所有可能的字符 串型string字符序列(程序中最长255个字符,文件中最长64k个字符)符号型symbol 小写字母打头的字母、数字和下划线组成的序列;双引号引起来的字符序列。整型integer-3276832768 实型real1E-3071E+308 文件型file有效的DOS文件名 3.域类型说明涉及四种格式:name1,name2,nameNd 格式1:mylist1,mylist2,mylistNd*格式2:mylistelementdom*elementdomd Complex_object_do
16、mf1(d11,d12,,d1N);f2(d21,d22,,d2M);fI(DI1,dI2,,dIK).filename1;name2;nameN 4.谓词说明 predicates predname(domain1,domain2,domainN)例如 predicates predname(char、string、symbol、integer、real)。也 可 以 用 如 下 的 规 则 来 定 义 谓 词choose_teams:choose_teams:same_league(X,Y),never_played(X,Y),write(X,Y)5.谓词与域类型说明示例 collecti
17、oncollectorbooktitleauthorpublicationpublisheryear谓词谓词(主函子主函子)第第0层层函子函子 第第1层层第第2层层第第3层层图图12-2 某图书馆数据库程序的谓词结构图某图书馆数据库程序的谓词结构图 domainspersonal_librarybook(title,author,publication)publication publication(publisher,year)collector,title,author,publisher symbolyear integerpredicatescollection(collector,p
18、ersonal_library)5.谓词与域类型说明示例 domains thing misc_thing(whatever);book(author,title);record(artist,album,type)person,whatever,author,title,artist,album,type symbol predicates owns(person,thing)5.谓词与域类型说明示例 6.动态数据库说明及其使用 databasedynamic_predname(domain1,domain2,domainN)例如domainsname,headshipsymbolcadre
19、_ageintegerwagerealdatabase cadre(name,headship,cadre_age,wage)1.asserta().例如语句asserta(cadre(张三,处长,21,2100.70).cadre(张三,处长,21,2100.70).2 assertz().例如语句assertz(cadre(李四,局长,25,2579.86).cadre(张三,处长,21,2100.70).cadre(李四,局长,25,2579.86).3 retract().例如语句retract(cadre(张三,处长,21,2100.70)cadre(李四,局长,25,2579.86
20、).4 save(DOS_file_name)。例如save(dycadre.dba).5.consult(DOS_file_name):把磁盘文件DOS_file_name的内容装入内存中的动态数据库。例如:consult(dycadre.dba).6.动态数据库说明及其使用 7.对象数据类型的转换 upper_lower(S1,S2)./*S1(大写)S2(小写)*/str_int(U1,U2)./*U1(串型)U2(整型)*/str_char(V1,V2)./*V1(串型)U2(字符型)*/str_real(T1,T2)./*T1(串型)T2(实型)*/char_int(W1,W2)./
21、*W1(字符型)W2(整型)*/8.自定义对象类型的转换 conv_real_int(R,N):-R=N.conv_int_real(N,R):-N=R.conv_str_symb(S,Sy):-S=Sy.除上面的定义 predicates conv_real_int(real,integer)conv_int_real(integer,real)conv_str_symb(string,symbol)125 PDC Prolog的基本搜索方法 1251 搜索与回溯 1内部合一程序 内部合一程序其核心是一个深度为主的搜索程序,主要任务是寻求满足匹配条件的事实和规则。在收到给定目标后,合一程序从
22、上到下,从左到右搜索Prolog数据库中的事实或规则。2 搜索与回溯 对于给定的子目标,Prolog从上到下,从左到右搜索数据库寻找匹配的事实或规则。若找到了一个与目标匹配的事实,则该子目标匹配成功,其指针指向数据库中所匹配的事实,即在该位置作一个标记,并对本事实的变量进行实例化(相当于赋值)。predicates like(symbol,symbol)fruit(symbol)color(symbol,symbol)clauses like(mary,pears)./*/like(mary,popcorn)./*/like(mary,apples).like(beth,X):-like(ma
23、ry,X),fruit(X),color(X,red)./*/like(beth,X):-like(mary,X),Xpopcorn.fruit(Pears)./*/fruit(apples).color(pears,yellow).color(oranges,orange)color(apples,yellow).color(apples,red).3 回溯举例分析回溯举例分析 1252 失败回溯循环法 goal /*内部目标*/like(X,Y),write(X,“喜欢”,Y).1方法一:在规则中引入内部谓词fail(不带限制的DO循环)。fail表示失败(不成功,为假)的意思,从而引起系
24、统回溯。示例 例6-5 有以下程序。goal output clauses cadre(张三,处长,21,2100.70).cadre(李四,局长,25,2579.86).cadre(王五,科长,25,2579.86).output:-cadre(Name,Headship,_,Wage),write(Name,Headship,Wage),nl,fail.2.方法2:在规则中引入带限制匹配的事实(带限制的FOR循环)如将上述OUTPUT规则改成下列的形式:goal output clauses cadre(张三,处长,21,2100.70).cadre(李四,局长,25,2579.86).c
25、adre(王五,科长,25,2579.86).output:-cadre(Name,Headship,_,Wage),write(Name,Headship,Wage),nl,Name王五.12.5.3切断回溯控制循环法阻止回溯的内部谓词“!”(cut),称为截断谓词。“!”总是立即成功的;若“!”位于规则体内的最后,使整个规则匹配成功而告结束。若“!”位于规则右边的其他位置时,不但阻止规则体“!”后面的子句回溯,而且在指定的位置引起切断。将例6-5中的output规则修改成:goal output clauses cadre(张三,处长,21,2100.70).cadre(李四,局长,25,
展开阅读全文