书签 分享 收藏 举报 版权申诉 / 43
上传文档赚钱

类型最新逻辑程序设计语言PROLOG课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:5054085
  • 上传时间:2023-02-06
  • 格式:PPT
  • 页数:43
  • 大小:716.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《最新逻辑程序设计语言PROLOG课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    最新 逻辑 程序设计语言 PROLOG 课件
    资源描述:

    1、 2.1 2.1 基本基本PROLOG PROLOG 2.1.1 PROLOG2.1.1 PROLOG的语句的语句 1.1.事实事实(fact)(fact)格式格式 谓词名谓词名(项表项表).).student(john).student(john).like(mary,music).like(mary,music).abc.abc.repeat.repeat.功能功能 一般表示对象的性质或关系。一般表示对象的性质或关系。3.3.回溯回溯 所谓回溯所谓回溯,就是在程序运行期间就是在程序运行期间,当某一个子当某一个子目标不能满足目标不能满足(即谓词匹配失败即谓词匹配失败)时时,控制就返回到控制就

    2、返回到前一个已经满足的子目标前一个已经满足的子目标(如果存在的话如果存在的话),),并撤消并撤消其有关变量的约束值其有关变量的约束值,然后再使其重新满足。然后再使其重新满足。成成功后功后,再继续满足原子目标。如果失败的子目标前再继续满足原子目标。如果失败的子目标前再无子目标再无子目标,则控制就返回到该子目标的上一级目则控制就返回到该子目标的上一级目标标(即该子目标谓词所在规则的头部即该子目标谓词所在规则的头部)使它重新匹配。使它重新匹配。回溯也是回溯也是PROLOGPROLOG的一个重要机制。的一个重要机制。likes(bell,sports).likes(bell,sports).likes

    3、(mary,music).likes(mary,music).likes(mary,sports).likes(mary,sports).likes(jane,smith).likes(jane,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).?-fri

    4、end(john,Y).?-friend(john,Y).则求解目标为则求解目标为 friend(john,Y).friend(john,Y).新目标新目标 likes(X,reading),likes(X,music).likes(X,reading),likes(X,music).2.2 Turbo PROLOG2.2 Turbo PROLOG程序设计程序设计2.2.1 2.2.1 程序结构程序结构 /*注注 释释 */编译指令编译指令 constants constants 常量说明常量说明 domains domains 域说明域说明 database database 数据库说明数据

    5、库说明 predicates predicates 谓词说明谓词说明 goal goal 目标语句目标语句 clauses clauses 子句集子句集 例例 如果把上节的例子程序作为如果把上节的例子程序作为Turbo PROLOGTurbo PROLOG程序程序,则应改则应改写为:写为:DOMAINSDOMAINS name=symbol name=symbol PREDICATES PREDICATES likes(name,name).likes(name,name).friend(name,name)friend(name,name)GOAL GOAL friend(john,Y),w

    6、rite(Y=,Y).friend(john,Y),write(Y=,Y).CLAUSES CLAUSES likes(bell,sports).likes(bell,sports).likes(mary,music).likes(mary,music).likes(mary,sports).likes(mary,sports).likes(jane,smith).likes(jane,smith).friend(john,X):-likes(X,sports),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).frie

    7、nd(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,reading),likes(X,music).领域段领域段该段说明程序谓词中所有参量项所属的领域。该段说明程序谓词中所有参量项所属的领域。Turbo PROLOGTurbo PROLOG的标准领域包括整数、实数、符号、串和符的标准领域包括整数、实数、符号、串和符号等号等,其具体说明如下表所示。其具体说明如下表所示。谓词段谓词段 该段说明程序中用到的谓词的名和参量项的名该段说明程序中用到的谓词的名和参量项的名(但但Turbo PROLOG Turbo PROL

    8、OG 的内部谓词无须说明的内部谓词无须说明)子句段子句段 该段是该段是Turbo PROLOGTurbo PROLOG程序的核心程序的核心,程序中的所有事程序中的所有事实和规则就放在这里实和规则就放在这里,系统在试图满足程序的目标时就系统在试图满足程序的目标时就对它们进行操作。对它们进行操作。目标段目标段 该段是放置程序目标的地方。该段是放置程序目标的地方。目标段可以只有一目标段可以只有一个目标谓词个目标谓词,例如上面的例子中就只有一个目标谓词;例如上面的例子中就只有一个目标谓词;也可以含有多个目标谓词也可以含有多个目标谓词,如如 goalgoal readint(X),Y=X+3,write

    9、(Y=,Y).readint(X),Y=X+3,write(Y=,Y).就有三个目标谓词。就有三个目标谓词。这种目标称为复合目标。这种目标称为复合目标。2.2.2 2.2.2 数据与表达式数据与表达式1.1.领域领域 1)标准领域标准领域 整数、实数、整数、实数、字符、字符、串和符号串和符号 2)结构结构 结构也称复合对象结构也称复合对象,一般形式为一般形式为 函子函子(参量表参量表)likes(Tom,sports(football,basketball,table_tennis).reading(王宏王宏,book(人工智能技术导论人工智能技术导论,西安电子科技西安电子科技大学出版社大学出

    10、版社).friend(father(Li),father(Zhao).复合对象在程序中的说明复合对象在程序中的说明,需分层进行。需分层进行。例如例如,对于上面的谓词对于上面的谓词 likes(Tom,sports(football,likes(Tom,sports(football,basketball,table_tennis).basketball,table_tennis).在程序中可说明如下:在程序中可说明如下:domainsdomains name=symbol name=symbol sy=symbol sy=symbol sp=sports(sy,sy,sy)sp=sports(

    11、sy,sy,sy)predicates predicates likes(name,sp)likes(name,sp)3)3)表表 表的一般形式表的一般形式 x1,x2,x1,x2,xn,xn 其中其中xi(i=1,2,xi(i=1,2,n),n)为为PROLOGPROLOG的项的项,一般要求同一个一般要求同一个表的元素必须属于同一领域。不含任何元素的表称为空表表的元素必须属于同一领域。不含任何元素的表称为空表,记为记为 。1,2,31,2,3 apple,orange,banana,grape,caneapple,orange,banana,grape,cane PROLOG,PROGRAM

    12、MING,in logicPROLOG,PROGRAMMING,in logic a,ba,b,c,dc,d,e e name(LiMing),age(20),sex(male),addr(xian)name(LiMing),age(20),sex(male),addr(xian)表的说明方法是在其组成元素的说明符后加一个星号表的说明方法是在其组成元素的说明符后加一个星号*。如:如:domainsdomains lists=string lists=string*predicates predicates pl(lists)pl(lists)例如,谓词例如,谓词 p(p(name(Liming

    13、),age(20)name(Liming),age(20)则需这样说明则需这样说明:domains domains rec=seg rec=seg*seg=name(string);age(integer)seg=name(string);age(integer)predicates predicates p(rec)p(rec)2.2.常量与变量常量与变量 Turbo PROLOGTurbo PROLOG的常量有整数、实数、的常量有整数、实数、字符、字符、串、符号、结构、表和文件这八种数据类型。同串、符号、结构、表和文件这八种数据类型。同理理,Turbo PROLOG,Turbo PROLO

    14、G的变量也就有这八种取值。另的变量也就有这八种取值。另外外,变量名要求必须是以大写字母或下划线开头变量名要求必须是以大写字母或下划线开头的字母、数字和下划线序列的字母、数字和下划线序列,或者只有一个下划或者只有一个下划线。线。这后一种变量称为无名变量。这后一种变量称为无名变量。3.3.算术表达式算术表达式 Turbo PROLOGTurbo PROLOG提供了五种最基本的算术运算:加、减、提供了五种最基本的算术运算:加、减、乘、除和取模乘、除和取模,相应运算符号为相应运算符号为+、-、*、/、modmod。这五种运算的顺序为:这五种运算的顺序为:*、/、modmod优先于优先于+、-。数学中的

    15、算术表达式数学中的算术表达式 PROLOGPROLOG中的算术表达式中的算术表达式 x+yz x+yz X+YX+Y*Z Z ab-c/d ab-c/d A A*B-C/DB-C/D u mod v U mod V u mod v U mod V Y=X+5 X=X+1 4.4.关系表达式关系表达式 Turbo PROLOGTurbo PROLOG提供了六种常用的关系运算提供了六种常用的关系运算,即小于、即小于、小于或等于、等于、大于、大于或等于和不等于小于或等于、等于、大于、大于或等于和不等于,其运其运算符依次为算符依次为 ,=,=,数学中的关系式数学中的关系式 Turbo PROLOGTu

    16、rbo PROLOG中的关系式中的关系式 X+1Y X+1Y X+1=YX+1=Y XY XY XY XY brother(Name1,Name2):-brother(Name1,Name2):-person(Name1,man,Age1),person(Name1,man,Age1),person(Name2,man,Age2),person(Name2,man,Age2),mother(Z,Name1),mother(Z,Name1),mother(Z,Name2),mother(Z,Name2),Age1Age2.Age1Age2.“=”的用法的用法 :比较符比较符和和约束符约束符 p(

    17、X,Y,Z):-Z=X+Y.p(X,Y,Z):-Z=X+Y.当变量当变量X X、Y Y、Z Z全部被实例化时全部被实例化时,“=”就是比较符。就是比较符。如:如:对于问题对于问题 Goal:p(3,5,8).Goal:p(3,5,8).机器回答:机器回答:yesyes。而对于而对于 Goal:p(3,5,7).Goal:p(3,5,7).机器回答:机器回答:nono。但当但当X,YX,Y被实例化被实例化,而而Z Z未被实例化时未被实例化时,“=”号就是约束符。号就是约束符。如:如:Goal:p(3,5,Z).Goal:p(3,5,Z).机器回答:机器回答:Z=8Z=8这时这时,机器使机器使Z

    18、Z实例化为实例化为X+YX+Y的结果。的结果。2.2.3 2.2.3 输入与输出输入与输出 (1)readln(X)(1)readln(X)(2)readint(X)(2)readint(X)(3)readreal(X)(3)readreal(X)(4)readchar(X)(4)readchar(X)(5)write(X1,X2,(5)write(X1,X2,Xn),Xn)(6)nl (6)nl 例例 用输入输出谓词编写一个简单的成绩用输入输出谓词编写一个简单的成绩 数据库查询程序。数据库查询程序。PREDICATESPREDICATES student(integer,string,rea

    19、l)student(integer,string,real)grade grade GOAL GOAL grade.grade.CLAUSES CLAUSES student(1,student(1,张三张三,90.2).,90.2).student(2,student(2,李四李四,95.5).,95.5).student(3,student(3,王五王五,96.4).,96.4).grade:-write(grade:-write(请输入姓名请输入姓名:),readln(Name),:),readln(Name),student(_,Name,Score),student(_,Name,S

    20、core),nl,write(Name,nl,write(Name,的成绩是的成绩是,Score).,Score).grade:-write(grade:-write(对不起对不起,找不到这个学生找不到这个学生!).!).2.2.4 2.2.4 分支与循环分支与循环1.1.分支分支 将将 IF x0 THEN x:=1IF x0 THEN x:=1 ELSE x:=0 ELSE x:=0用用PROLOGPROLOG实现则可以是实现则可以是 br:-x0,x=1.br:-x0,x=1.br:-x=0.br:-x=0.2.2.循环循环 程序程序1 1:student(1,student(1,张三张

    21、三,90.2).,90.2).student(2,student(2,李四李四,95.5).,95.5).student(3,student(3,王五王五,96.4).,96.4).print:-student(Number,Name,Score),print:-student(Number,Name,Score),write(Number,Name,Score),write(Number,Name,Score),nl,nl,Number=3.Number=3.程序程序2 2:student(1,student(1,张三张三,90.2).,90.2).student(2,student(2,李

    22、四李四,95.5).,95.5).student(3,student(3,王五王五,96.4).,96.4).print:-student(Number,Name,Score),print:-student(Number,Name,Score),write(Number,Name,Score),nl,write(Number,Name,Score),nl,fail.fail.print:-.print:-.2.2.5 2.2.5 动态数据库动态数据库 动态数据库操作谓词动态数据库操作谓词:asserta(asserta(factfact).).assertz(assertz(factfact)

    23、.).retract(retract(factfact).).例例 asserta(student(20,asserta(student(20,李明李明,90.5).,90.5).retract(student(20,_,_).retract(student(20,_,_).2.2.6 2.2.6 表处理与递归表处理与递归 1.1.表头与表尾表头与表尾 表头是表中的第一个元素;表尾表头是表中的第一个元素;表尾是表中除第一个元是表中除第一个元素外的其余元素按原来顺序组成的表。素外的其余元素按原来顺序组成的表。表头与表尾示例表头与表尾示例 表表 表头表头 表尾表尾 2.2.表的匹配合一表的匹配合一

    24、 表的匹配合一示例表的匹配合一示例 表表1 表表2 合一后的变量值合一后的变量值 X=a,Y=X=a,Y=X=a,Y=X=a,Y=a X X=a,Y=例例 设计一个能判断对象设计一个能判断对象X X是表是表L L的成员的程序。的成员的程序。分析:分析:(1)(1)如果如果X X与表与表L L中的第一个元素中的第一个元素(即表头即表头)是同一个是同一个对象对象,则则X X就是就是L L的成员。的成员。(2)(2)如果如果X X是是L L的尾部的成员的尾部的成员,则则X X也就是也就是L L的成员。的成员。程序:程序:member(X,member(X,X|_X|_).).member(X,mem

    25、ber(X,_|Tail_|Tail):-member(X,Tail).):-member(X,Tail).Goal:member(a,Goal:member(a,a,b,c,da,b,c,d).).yes yes Goal:member(e,Goal:member(e,a,b,c,da,b,c,d).).no no Goal:member(X,Goal:member(X,a,b,c,da,b,c,d).).X=a X=a 例例 表的拼接程序表的拼接程序,即把两个表连接成一个表。即把两个表连接成一个表。append(append(,L,L).,L,L).append(append(H|TH|T

    26、,L2,L2,H|TnH|Tn):-append(T,L2,Tn).):-append(T,L2,Tn).Goal:append(Goal:append(1,2,31,2,3,4,54,5,L).,L).L=L=1,2,3,4,51,2,3,4,5 Goal:append(Goal:append(1,2,31,2,3,4,54,5,1,2,3,4,51,2,3,4,5).).yes yes Goal:append(Goal:append(1,2,31,2,3,4,54,5,1,2,3,4,5,61,2,3,4,5,6).).no no Goal:append(Goal:append(1,2,3

    27、1,2,3,Y,Y,1,2,3,4,51,2,3,4,5).).Y=Y=4,54,5 Goal:append(X,Goal:append(X,4,54,5,1,2,3,4,51,2,3,4,5).).X=X=1,2,31,2,3 Goal:append(X,Y,Goal:append(X,Y,1,2,3,4,51,2,3,4,5).).X=X=,Y=,Y=1,2,3,4,51,2,3,4,5 X=X=1 1,Y=,Y=2,3,4,52,3,4,5 X=X=1,21,2,Y=,Y=3,4,53,4,5 X=X=1,2,31,2,3,Y=,Y=4,54,5 例例 表的输出。表的输出。print(p

    28、rint().).print(print(H|TH|T):-write(H),print(T).):-write(H),print(T).例例 表的倒置表的倒置,即求一个表的逆序表。即求一个表的逆序表。reverse(reverse(,).).reverse(reverse(H|TH|T,L):-reverse(T,L1),L):-reverse(T,L1),append(L1,append(L1,H H,L).,L).2.2.7 2.2.7 回溯控制回溯控制 截断谓词截断谓词“!”的语义:的语义:(1)(1)若将若将“!”插在子句体内作为一个子目标插在子句体内作为一个子目标,它总它总是立即成

    29、功。是立即成功。(2)(2)若若“!”位于子句体的最后位于子句体的最后,则它就阻止对它所则它就阻止对它所在子句的头谓词的所有子句的回溯访问在子句的头谓词的所有子句的回溯访问,而让回溯跳过而让回溯跳过该头谓词该头谓词(子目标子目标),),去访问前一个子目标去访问前一个子目标(如果有的话如果有的话)。(3)(3)若若“!”位于其他位置位于其他位置,则当其后发生回溯且回则当其后发生回溯且回溯到溯到“!”处时处时,就在此处失败就在此处失败,并且并且“!”还使它所在子还使它所在子句的头谓词句的头谓词(子目标子目标)整个失败整个失败(即阻止再去访问头谓词即阻止再去访问头谓词的其余子句的其余子句(如果有的话

    30、如果有的话),),即迫使系统直接回溯到该头即迫使系统直接回溯到该头谓词谓词(子目标子目标)的前一个子目标的前一个子目标(如果有的话如果有的话)。例例 考虑下面的程序考虑下面的程序:p(a).p(a).(2-1)(2-1)p(b).p(b).(2-2)(2-2)q(b).q(b).(2-3)(2-3)r(X):-p(X),q(X).(2-4)r(X):-p(X),q(X).(2-4)r(c).r(c).对于目标对于目标:r(Y).:r(Y).可有一个解可有一个解 Y=bY=b 但当把式但当把式(2-4)(2-4)改为改为 r(X):-p(X),!,q(X).(2-4)r(X):-p(X),!,q

    31、(X).(2-4)时时,却无解。却无解。为什么呢?为什么呢?例例 设有程序:设有程序:g0:-g11,g12,g13.g0:-g11,g12,g13.(2-5)(2-5)g0:-g14.g0:-g14.(2-6)(2-6)g12:-g21,!,g23.g12:-g21,!,g23.(2-7)(2-7)g12:-g24,g25.(2-8)g12:-g24,g25.(2-8)给出目标给出目标:g0.:g0.把子句把子句(2-7)(2-7)改为改为 g12:-g21,g23,!.(2-9)g12:-g21,g23,!.(2-9)2.2.8 2.2.8 程序举例程序举例例例 一个简单的路径查询程序。一

    32、个简单的路径查询程序。predicatespredicates road(symbol,symbol)road(symbol,symbol)path(symbol,symbol)path(symbol,symbol)clausesclauses road(a,b).road(a,b).road(a,c).road(a,c).road(b,d).road(b,d).road(c,d).road(c,d).road(d,e).road(d,e).road(b,e).road(b,e).path(X,Y):-road(X,Y).path(X,Y):-road(X,Y).path(X,Y):-road

    33、(X,Z),path(Z,Y).path(X,Y):-road(X,Z),path(Z,Y).Goal:path(a,e).Goal:path(a,e).yesyesGoal:path(e,a).Goal:path(e,a).nonoGoal Goal:run.run.run:-path(a,X),write(X=,X),nl,fail.run:-path(a,X),write(X=,X),nl,fail.run.run.X=bX=b X=cX=c X=dX=d X=eX=e X=dX=d X=eX=e X=eX=e 例例 下面是一个求阶乘程序下面是一个求阶乘程序,程序中使用了递归。程序中使用了递归。domains n,f=integer predicates factorial(n,f)goal readint(I),factorial(I,F),write(I,!=,F).clauses factorial(1,1).factorial(N,Res):-N0,N1=N-1,factorial(N1,FacN1),Res=N*FacN1.

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:最新逻辑程序设计语言PROLOG课件.ppt
    链接地址:https://www.163wenku.com/p-5054085.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库