Prolog语言(耐心看完,你就入门了)_第1页
Prolog语言(耐心看完,你就入门了)_第2页
Prolog语言(耐心看完,你就入门了)_第3页
Prolog语言(耐心看完,你就入门了)_第4页
Prolog语言(耐心看完,你就入门了)_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/7/11,人 工 智 能 Artificial Intelligence (AI),2020/7/11,Prolog 语言简介,Prolog语言是一种以一阶谓词为基础的逻辑性语言(Programming in Logic),2020/7/11,Prolog语言的特点 Prolog语言的基本内容 简单的例子,2020/7/11,Prolog语言(或者系统)是以一阶谓词逻辑的Horn 子句集为语法,以Robinson的消解原理为工具,加上深度优先的控制策略而形成的人工智能通用程序设计语言,Prolog语言的特点,2020/7/11,Horn子句集,消解原理,深度优先,Prolog系统,2

2、020/7/11,Prolog具有下列特点:, 是一种描述性语言。只需要告诉 “系统做什么”,不要告诉系统 “如何做” 数据与程序的统一表达。提供一种统一的符号结构 “项” ,数据与程序都是由项组成,2020/7/11, 自动实现模式匹配与回溯。这是人工智能中最常用的两项操作,Prolog自动实现这些操作 程序易于编写与阅读。它是面向人的自然语言 语句句型少,语法简明。只有三种句型,2020/7/11,参考资料: 雷英杰,张雷,邢清华,孙金萍。Visual Prolog 语言教程。西安:陕西科学技术出版社,2002年2月(380页,35元) 雷英杰,邢清华,孙金萍,张雷。Visual Prol

3、og 编程、环境及接口。北京:国防工业出版社,2004年1月(412页,36元),2020/7/11,Prolog语言的基本内容 1 项 2 Prolog中的语句 3 表结构 4 Prolog程序的结构 5 常用内部谓词 6 Prolog程序设计步骤,2020/7/11,符号说明: “ := ” 表示“ 定义为 ” “ | ” 表示 “ 或 ”,可选 “ ” 表示 “ 重复或者出现多个 ”,1 项,2020/7/11,项的定义: := | | ,2020/7/11,:= | := | | ,:= | | ,2020/7/11,命名:用小写字母或者小写字母开头的小写字母数字串 用途:用于标识对象

4、的名字、谓词(对象间的关系)或函数名,标识符原子,例:john, marry, classmate, teacher,2020/7/11,字符串原子是用引号括起来的符号串 特殊原子指一些特殊符号,如 +、-、*、 / 等,2020/7/11,变量:用于表示暂时不能命名或者不需要命名的对象,用大写字母开头,:= | | ,2020/7/11,特殊变量:空变量,记作:“_” 含义:我们对问题的某一个变量的值不关心,2020/7/11, := ( , )| ,:= | | ,2020/7/11,复合项:由一组其它对象组成的单个对象 例: 函数项: like(john, apple) 表: sa, s

5、b, 1,2,3 表达式: (12+59)*49-96,2020/7/11,项,常量,变量,复合项,原子,数,标识符原子,字符串原子,特殊原子,(, ), ,2020/7/11,2 Prolog中的语句,事实: P. 含义:无条件成立,恒为真 例:like( monkey, banana),Prolog中的语句分成三种形式:,2020/7/11,规则: P :- P1 , P2 , , Pn . “ :- ” 表示“蕴涵” “ ,” 表示“合取” 含义:若 P1 , , Pn 均为真时,P为真,2020/7/11,问题(目标) Goal Q1 , Q2 , , Qm . 含义:待回答的问题,即

6、 Q1 , , Qm 同时为真吗?,2020/7/11,从消解角度来看: (事实)中,P是Horn子句,2020/7/11,(规则)可以表示为 P1P2PnP 可以转化为 P1P2PnP 也是Horn子句,并受全称量词约束,2020/7/11,(问题)是 Q1Qm 受存在量词约束,取非后 Q1Qm 受全称量词约束,是Horn子句,2020/7/11,Prolog三种形式的语言都是Horn子句 问题求解就是Horn子句集消解,2020/7/11,3 表结构,表:若干个元素的有序序列 表中的元素:常量、变量、项、表 表用“ ”来表示,元素之间用逗号或者空格分开,2020/7/11,例: 1, 2,

7、 3 a, b, c, d,2020/7/11,用符号“ | ”来划分表头(第一个元素)和表尾(其余元素) 特例: 当只用一个元素时,表尾为空 空表(无元素),既无表头又无表尾,2020/7/11,例: P(the, cat, sat, down). ?- P( X | Y ). 答案:X=the, Y=cat, sat, down ?-P( X , Y | Z ). 答案:X=the, Y=cat,Zsat, down,2020/7/11,4 Prolog程序的结构,Prolog的程序分为两部分: 前提部分:所有事实和规则 问题部分:目标子句序列,2020/7/11,注意: 这两部分不能颠倒

8、。必须前提部分写在前面,问题部分写在后面,2020/7/11,likes(m, f). likes(m, w). (事实) likes(j, w). likes(j, s). goal likes(m, X), likes(j, X). (问题) 问题:是否 m 和 j 都喜欢什么东西?( X = ? ),f,w,s,m,j,2020/7/11,Prolog的求解过程 现在有两个问题:likes(m, X) 和 likes(j, X)) 第一步:第一个问题 likes(m, X) 去与事实匹配(置换与合一),按顺序得到 f/X,likes(m, f). likes(m, w). likes(j

9、, w). likes(j, s).,2020/7/11,第二步:f 代替第二个问题 likes(j, X) 中的 X,则得 likes(j, f) 。再与事实匹配,不能匹配,失败,则回溯,忘掉刚才的匹配,likes(m, f). likes(m, w). likes(j, w). likes(j, s).,likes(m, X) likes(j, X),2020/7/11,第三步:回到第一个问题 likes(m, X) ,重新匹配,得到 w / X 第四步:第二个问题变成 likes(j, w)。再与事实匹配,成功 第五步:答案就是 X=w,likes(m, f). likes(m, w).

10、 likes(j, w). likes(j, s).,likes(m, X) likes(j, X),2020/7/11,说明: 实际运行中,要逐个试探(搜索),失败则要回溯,成功也要回溯(求出所有解),2020/7/11,例: father(a, b). a是b的父亲 father(c, d). brother(a, c). a与c是兄弟关系 uncle(X, Y) :- brother(X, Z), father(Z, Y). ?- uncle(a, U). 问题: a 是谁的叔叔 ? ( U = ? ),2020/7/11,第一步:问题 uncle(a,U) 与事实逐个匹配,不成功,Pr

11、olog的求解过程:,father(a, b). father(c, d). brother(a, c).,2020/7/11,第二步:与规则头(左部)匹配,即寻找合一者,有 a/X, U/Y 转化为两个子问题:brother(a, Z)和father(Z, U),uncle(X, Y) :- brother(X, Z) , father(Z, Y).,uncle(a,U),2020/7/11,第一个子问题 brother(a, Z) 与事实匹配,得到c/Z 代人第二个子问题,有 father(c, U)。与事实匹配,得到 d/U,即 U=d,解是:a是d 的叔叔,father(a, b).

12、father(c, d). brother(a, c).,brother(a, Z) father(Z, U),2020/7/11,Prolog的实现方法主要是:匹配与回溯 匹配:合一过程、消解过程 回溯:搜索,而且是深度优先搜索,2020/7/11,关于匹配的几点说明: 第一、一个变量被置换后,代入了另一个项,则称该变量为实例化的变量,2020/7/11,若与另一个未实例化的变量匹配,则视为同一变量,两者共享 若与另一个实例化的变量匹配,也变成了实例化的变量,且两者同值 若与常量匹配,也变成了实例化变量,并取常量的值,第二、一个未实例化的变量可以与任何项匹配:,2020/7/11,第三、常量

13、只能与相同的常量匹配 第四、实例化的变量与另一个实例化的值相同的变量匹配,也可以与另一个未实例化的变量匹配,使另一个变量实例化,且约束值相同,2020/7/11,5 常用的内部谓词 内部谓词:Prolog系统本身定义的一些基本谓词 注意:可以直接使用,用户不能修改,2020/7/11,算术运算 算术表达式由操作数(数、变量)、操作符和括号组成 算术运算符号:“+、-、* 、/”(加减乘除),2020/7/11,优先级:与通常的数学运算一致 形式:中缀:X+Y*Z 前缀:+(X,*(Y,Z),2020/7/11,比较谓词 eq(X, Y) X=Y ne(X, Y) XY gt(X, Y) XY

14、ls(X, Y) XY,2020/7/11,对于 “ 、 ”, X,Y 可以取 常量 变量 谓词 表,2020/7/11,第一、当一个变量已经实例化,则可以与任意未实例化的变量相等,且将其实例化(赋值功能) 第二、两者均未实例化,eq(X, Y) 恒为真,并视为同一变量,对于“”(赋值与比较)的几点说明:,2020/7/11,第三、均以实例化,由当前值来决定 第四、如果为表,要求对应的元素相等,才为真 第五、如果是谓词,谓词同名,变元个数相等,对应的变元相等,2020/7/11,输入输出谓词 第一、write(X):向输出设备输出实例化结果 第二、read(X): 当 X 未实例化时,输入一个

15、项 当 X 在输入前已经实例化,则读入项将与 X 匹配,根据匹配的成功与否,决定其真假值,2020/7/11,谓词cut与fail(特殊谓词): cut ( ! ):禁止回溯 fail: 强迫回溯,2020/7/11,第一、只允许作为一个子目标出现在程序中 第二、第一次遇到它时,总是立刻被满足,但是不能被重新满足 第三、用户可以使用它来控制回溯方式,切断一些不必要的回溯,提高程序运行效率,关于cut的几点说明:,2020/7/11,关于 fail 的说明: 作为一个子目标,使Prolog程序运行到 fail,必定引起回溯,2020/7/11,例:求 1 到 n 之间的和 定义一个二元谓词 su

16、m(N, X),其中 X 表示和,答案是:X=21 去掉“ !”,会发生什么?,sum(1,1):-!. sum(N,R):- N1=N-1, sum(N1, R1), R=R1+N. ?- sum(6,X).,2020/7/11,6 Prolog程序设计步骤,第一、说明事实:说明与待求解的问题有关的事实。例如,人物事及相互关系,对应于叙述性知识,对应于Prolog程序的组成部分,设计步骤分为:,2020/7/11,第二、定义规则:定义个体及其相互关系的推理规则,反映与待求解问题有关的过程性知识 第三:确定目标(问题):提出待求解的问题或者确定逻辑推理的目标,2020/7/11,程序的一般结构

17、(组成部分),Visual Prolog程序包括三到四个基本程序段: 第一、域段:说明谓词变量的域(类型) 第二、谓词段:说明非标准谓词(用户自己的谓词),2020/7/11,第三、子句段:核心部分,可以写出事实与规则 第四、目标段:设置内部目标,2020/7/11,域段(domains) Prolog语言中的域用于区分不同变量类型的数据 相当于其它高级语言中的数据类型,2020/7/11,基本标准域有: char: 用单引号括起来的单个字符,例如,a integer:整数,范围为32767到-32768 real: 实数,例如,86.72,5.1e+21,2020/7/11,string:

18、用双引号括起来的字符序列 例:“I am from Nanjing”,2020/7/11,symbol:有两种形式: 以小写字母开头的字母、数字和下划线组成的序列 用双引号括起来的字符串序列,2020/7/11,Prolog中表示成下列形式: integerlist = integer * “integer” 说明表中元素的类型 “* ” 告诉编译系统,这是一张表,表:,2020/7/11,例 domains title , author = symbol pages = integer 注:每一个说明的最后无句号 “ . ”,2020/7/11,谓词段(predicates) 说明用户自己定义的谓词 说明谓词变

温馨提示

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

评论

0/150

提交评论