PROLOG程序设计_第1页
PROLOG程序设计_第2页
PROLOG程序设计_第3页
PROLOG程序设计_第4页
PROLOG程序设计_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,PROLOG程序设计(1),一、Prolog语言的产生和发展Prolog(PROgramminginLOGic)法国的柯尔迈伦和他在马塞大学的助手发明的一种高效的逻辑性语言。是一种逻辑推理机,具有表处理的功能,通过合一、置换、消解、回溯和匹配等机制来求解问题。已应用于许多符号运算研究领域。是人工智能与专家系统领域最著名的逻辑程序设计语言。,Prolog是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。VisualProlog意指可视化逻辑程序设计语言,是基于Prolog语言的可视化集成开发环境,其语言符合相应的国际标准ISO/IEC13211-1:1995.,现在的Prolog语言有许多版本,但它们的核心部分都是一样的。Prolog的基本语句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示,因而程序逻辑性强,文法简捷,清晰易懂。另一方面,Prolog是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog就使用内部的演绎推理机制自动求解程序给定的目标,而不需要在程序中列出详细的求解步骤。,预计短时期内在国际上已经十分流行的最新版本可视化逻辑程序设计语言VisualProlog语言将在我国流行开来,并将迅速成为我国研究和开发智能化应用的重要工具。功能模式匹配、递归、回溯、对象机制、事实数据库和谓词库。图形开发环境、编辑器、连接器和调试器,支持模块化和面向对象编程技术,支持系统级编程、文件操作、字符串处理、位级运算、算术和逻辑运算,和其它编程语言的接口。,环境支持Windows3.x/95/98/Me/NT/2000/XP、OS/2和文本方式下的DOS、Linux和SCOUNIX。适合的领域专家系统、规划和其他AI相关问题的求解,是智能程序设计语言中具有代表性且应用较多的一种语言。自然语言理解、机器定理证明等方面。和其它语言一样,可以轻松地开发出各种应用,包括数据库和WEB应用。,二、VisualProlog的使用VisualProlog的使用环境运行和测试一个程序GOAL从磁盘中载入例子处理错误,三、Prolog基本原理3.1逻辑设计在PROLOG中,可以从已经知道的事情出发通过逻辑判断来获得解决方案。一个PROLOG程序不是一个顺序的行动,是说明性语言。通过对比问题的答案来取回存储的信息。,三、Prolog基本原理(2),、事实:众所周知的事实用来说明一个问题中已知的对象和它们之间的关系。在Prolog程序中,事实由谓词名及用括号括起来的一个或几个对象组成。谓词和对象可由用户自己定义。例如,谓词likes(bill,book).是一个名为like的关系,表示对象bill和book之间有喜欢的关系。travels(zhangming,beijing).张明到北京旅行。,、规则:从给出的事件推断出的凭据规则由几个互相有依赖性的简单句(谓词)组成,用来描述事实之间的依赖关系。从形式上看,规则由左边表示结论的后件谓词和右边表示条件的前提谓词组成。例如,规则bird(X):-animal(X),has(X,feather).表示凡是动物并且有羽毛,那么它就是鸟。travels(liying,X):-travels(zhangming,X).表示张明到哪里旅行,李英就到那里旅行。,、目标(问题)把事实和规则写进Prolog程序中后,就可以向Prolog询问有关问题的答案,询问的问题就是程序运行的目标。目标的结构与事实或规则相同,可以是一个简单的谓词,也可以是多个谓词的组合。目标分内、外两种,内部目标写在程序中,外部目标在程序运行时由用户手工键入。例如问题?-student(john).表示“john是学生吗?”Goaltravels(liying,X).表示“李英到哪里去旅行”,PROLOG程序的组成:(1)/*/之间的部分,为注释,可写程序的标题等喜欢的内容。(2)domains(领域):定义开始在Predicates(谓词)中所使用的变量。(3)Predicates(谓词):定义关系。(4)clauses(5)goal,PROLOG程序的组成:(1)子句部分(CLAUSES)可以放置所有的构成程序的事实和规则。一个已知断言的子句必须被一起放在子句部分,一定次序的子句定义了一个谓词,这被称为程序。当试着去实现一个目标时,VisualProlog将从子句部分的顶步开始,它搜索时查看每一个事实和规则。当VisualProlog顺着子句部分执行时,它把内部的指针放在匹配当前的子目标的每个子句上。如果不只是一个答案,VisualProlog将回到集合指针的开始并且寻找另外的匹配。,PROLOG程序的组成:(2)谓词部分(PREDICATES)先声明谓词名,然后是参数。谓词名字(argument_type1,argument_type2,argument_type3,argument_typeN).参数之间由逗号隔开,参数类型应是标准的域或在域节声名的域。谓词的名字必须以字母开始,后跟一系列的字母数字和下划线。字母的大小写没有关系,但是推荐谓词名字的第一个字母使用小写字母。,四、基本语法及结构1、数据类型1、integer(整数型)例:-20000,-1,5,02、real(实数型)例:-18.5,12.34e+5,0.001,3.143、char(字符型)例:a,B,/,Sunday(D),has_motor(P).可表示为:go_fishing(P,D):-saturday(D),has_motor(P).go_fishing(P,D):-saturday(D),has_motor(P).,四、规则例3、X在Y这一天跳舞,若a)Y是假日,并且X喜欢跳舞,或b)Y是X的生日描述成PROLOG规则。解:dance(X,Y):-holiday(Y),likes(X,dancing).dance(X,Y):-birthday(X,Y).,四、规则注意:1)变量没有类型之分;2)在同一规则中出现的同一变量在任何时候,任何位置都保持一致;3)Prolog中变量的作用范围仅限于它所出现的同一条规则内。,四、语法1、输入输出的处理read(X)write(X)display(X)write(“A=“).A=write(X),nl.1X被具体化为一个项。nl回车,四、PROLOG的语法2、数据库摩托车库存问题3、合一将所给的目标参数与事实或规则中的某些“参数”相匹配,就叫合一。4、回溯(1)Prolog的回溯技术(2)强制回溯,(3)防止回溯!p1:-a,p2(A),b.p2(c).p2(d).p2(e).p1:-a,b,p2,c.p2:-d,e,!,f.p2:-g.,四、PROLOG的语法5、递归,五、预定义谓词的功能与使用1、数据库中子句的插入、删除及显示asserta(X),assertz(X):用户把一个新的子句加入到数据库中。asserta(X)把X插入到数据库的开始部分,assertz(X)把X插入到数据库的末尾部分。X必须被具体化为一条子句,即一条事实或规则。retract(X)与asserta、assertz正相反,它将与X匹配的子句由数据库里删除。retractall(X)删除所有的与X匹配的规则。listinglisting(A)显示数据库中的全部子句。,五、预定义谓词的功能与使用2、项的分类和操作项是指原子、变量、常量或结构,结构中也应包括表。var(X):目标成功,如果X是个自由变量。?-var(Z).novar(X):与var相反。atom(A):目标成功,如果A具体化为原子。?-atom(23).?-atom(street).?-atom(street).?-atom(“street”).Integer(X)?-Xis12/2,integer(X).?-X=12/2,integer(X).,五、预定义谓词的功能与使用3、表操作member(M,L)?-member(a(1,2),a(1,2),b).?-member(X,a,b,c,d).append(L1,L2,L)?-append(a,b,c,d,e,Y).例:过河,Prolog语言的过程式的一面Prolog是说明性的语言,但有过程式语言的一面。(1)IFTHENELSE结构在C语言中:ifx=1printf(“ONE”)elseprintf(“notvalid”);printf(“Endofprogram.”).,一、Prolog语言的过程式的一面(续)Ewritetest(X):-X=1,!,write(“ONE”).writetest(X):-write(“Notvalid”).与例子中比较,一、Prolog语言的过程式的一面(续)若ELSE子句不需要,此谓词变成:writetest(X):-X=1,!,write(“ONE”).writetest(_).,Prolog语言的过程式的一面(续)(2)CASE结构根据需要根据变量的值,从几个路径中选择一个。对于过程性语言可用CASE结构。example20_1.pro,Prolog语言的过程式的一面(续)(3)DOWHILE和其它的循环结构可用DOWHILE结构,在遇到某一条件之前,反复进行某种操作。,Prolog语言的过程式的一面(续)(4)优化控制结构中do_while(35).放在前和后的区别。优化控制结构:将递归调用放在谓词在最后的调用。Prolog可自动识别这种尾递归,将不会发生堆栈溢出现象。将截断尽可能放在测试条件之后。终止条件应作为最后的子句。,二、复合数据对象和算符允许把几段信息看成一个整体DATEMay41919DOMAINSdate_cmp=date(string,unsigned,unsigned)D=date(“May”,4,1919),二、复合数据对象和算符(2)复合数据对象的合一一个复合对象可以与一个简单的变量或者一个适合它的复合对象合一。example24、25,三、表的使用表是一个递归式复合数据结构,所以用户需要用递归算法来处理它。基本方法:从头到尾过滤一遍,对每个元素都进行处理,直到末尾。,三、表的使用(续)(1)表的书写write_a_list().write_a_list(H|T):-write(H),nl,write_a_list(T).,三、表的使用(续)(2)表的统计length_of(,0).length_of(_|T,L):-length_of(T,TailLength),L=TailLength+1.,三、表的使用(续)(3)尾部递归表的统计length_of(,Result,Result).length_of(_|T,Result,Counter):-NewCounter=Counter+1,length_of(T,Result,NewCounter).,三、表的使用(续)(4)表的成员member(Name,Name|_).member(Name,_|Tail):-member(Name,Tail).,三、表的使用(续)(5)表的成员和adder(List,Sum):-adder1(List,0,Sum),!.adder1(Head|Tail,X,Sum):-Temp:=X+Head,adder1(Tail,Temp,Sum).adder1(,Sum,Sum).member(Name,Name|_).member(Name,_|Tail):-member(Name,Tail).example29,三、表的使用(续)(5)表1和表2的连接append(,List2,List2).append(H|L1,List2,H|L3):-append(L1,List2,L3).,三、表的使用(续)(5)表1和表2的连接append(,List2,List2).append(H|L1,List2,H|L3):-append(L1,List2,L3).,三、表的使用(续)(6)表中的最后一个元素last_element(Head,LastElement):-LastElement=Head.last_element(_|Tail,X):-last_element(Tail,X).,四、文件操作谓词写谓词1、write/*和nlwrite(Param1,Param2,ParamN)nl:换行,四、文件操作谓词写谓词(续):转义字符:打印反斜线n:产生新行和回车返回t:制表符r:回车符Example3031,四、文件操作谓词写谓词(续)writef(FormatString,arg1,arg2,argN)Example3233,四、文件操作谓词读谓词readln/1:读整行readln(Line):如果输入,readln将会失败。readint/1,readreal/1,readchar/1,四、文件操作谓词读谓词(续)file_str/2读来自一个文件的字符并将它们传递到一个变量,或产生一个文件而且将字符写进文件。file_str(“t.dat”,My_text)Example3435,四、文件操作谓词(2)文件系统文件的打开方式读写追加修改1、openread/2openread(SymbolicFileName,OsFileName)2、openwrite/2openwrite(SymbolicFileName,OsFileName),四、文件操作谓词(2)文件系统(续)3、openappend/2openappend(SymbolicFileName,OsFileName)4、openmodify/2openmodify(SymbolicFileName,OsFileName)5、closefile/1closefile(SymbolicFileName),四、文件操作谓词(2)文件系统(续)6、readdevice/1readdevice(SymbolicFileName)7、writedevice/1writedevice(SymbolicFileName),四、系统高级编程(1)访问操作系统1、system/1system(“”)如果判断为一个空字符串(“”),那么在交互模式下将会运

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论