第2章 逻辑程序设计语言PROLOG(蓝)
Prolog语言简介

<项>::= <常量> | <变量> | <复合项>
<复合项> ::=
<原子>(<项> { , <项> })|
<项> <原子> <项> { <原子> <项> }
2019/11/18
复合项:由一组其它对象组成的单个对象
例: 函数项: like(john, apple) 表: [sa, sb], [1,2,3] 表达式: (12+59)*49-96
前缀:+(X,*(Y,Z))
2019/11/18
②比较谓词
eq(X, Y) X=Y
ne(X, Y) X<>Y
gt(X, Y) X>Y
ls(X, Y)
2019/11/18
X<Y
对于 “= 、<> ”, X,Y 可以取
常量 变量 谓词 表
2019/11/18
对于“=”(赋值与比较)的几点说明: 第一、当一个变量已经实例化,则可以与任意
2019/11/18
程序的一般结构(组成部分) Visual Prolog程序包括三到四个基本程序段: 第一、域段:说明谓词变量的域(类型) 第二、谓词段:说明非标准谓词(用户自己的
2019/11/18
第一个子问题 brother(a, Z) 与事实匹配,得到{c/Z} 代人第二个子问题,有 father(c, U)。与事实匹配,
得到 {d/U},即 U=d,解是:a是d 的叔叔
brother(a, Z) father(Z, U)
2019/11/18
人工智能导论课程介绍(蓝)

考核方式与成绩评定
本课程的考核性质为考查,考核方式为平时考查与 期末书面考试相结合,其中平时考查包括课堂表现、课外 作业和上机实验。成绩评定的计算公式为:
平时成绩×30% + 期末考试成绩×70% = 最终成绩
平时成绩= 1×表现成绩+ 1 ×作业成绩+ 1×实验成绩
3
3
பைடு நூலகம்
3
人工智能导论
课程介绍
西安石油大学计算机学院
课程简介
适用专业:计算机科学与技术、软件工程
学 时:46 学分:2.5 实验学时:8 内容提要: 本课程介绍人工智能的基本原理和基本技术
及其应用。内容包括:人工智能概述、人工智能 程序设计语言、搜索与问题求解、知识表示与推 理、机器学习与知识发现、专家系统、Agent系 统和智能化网络。 教 材:《人工智能技术导论》(第三版),廉师友编
二课程教学内容与学时分配第一章人工智能概述2学时第二章逻辑程序设计语言prolog4学时第三章基于图搜索的问题求解6学时第四章基于遗传算法的随机优化搜索2学时第五章知识表示与推理10学时第六章机器学习与知识发现6学时第七章专家系统4学时第八章agent系统2学时第九章智能化网络2学时上机实验小型专家系统设计与实现8学时三课程教学的基本要求1
著,西安电子科技大学出版社,2007。
教材类别:“十一五”国家级规划教材
教学大纲 一、课程的性质和目的
人工智能是计算机科学与技术的一个前沿学科,它也 是一个综合性的交叉学科。《人工智能导论》为计算机科 学技术专业和软件工程专业的一门任选课,其目的是使学 生初步了解人工智能的基本原理,初步学习和掌握人工智 能的基本技术,以便拓宽知识面,并为进一步学习和应用 奠定基础。
程序设计语言基础精品文档

B.a、[
C.a、[和]
D.a、[、]和,
2.2.4 词法分析 考点1:词法分析的功能 词法分析阶段的主要功能如下:
(1)识别出源程序中意义独立的最小词法单 位——单词,并且确定其类型(例如表示 符、关键字、操作符还是数字等)。
(2)删除无用的空格、回车和其它与输入介 质有关的无用符号以及程序注释。
若M的初态结点同时又是终态结点, 则空字可为M所识别(接受)。
2.不确定的有穷自动机(NFA)
• 一个不确定的有穷自动机(NFA)M是一个五 元组:M=(K,∑,f,S,Z)其中
(1)K是一个有穷集,它的每个元素称为一个状 态;
(2)∑是一个有穷字母表,它的每个元素称为一 个输入字符;
(3)f是转换函数,是从K×∑*—>K上子集的映 像;
• 请画出该NFA的状态转换图。
补充:
对于∑*中的任何一个串t,若存在一 条从某一初态结点到某一个终态结点的 道路,且这条道路上所有弧的标记符依 序连接成的串等于t,则称t可为NFA M所 识别(读出或接受)。
• 例2中的NFA M所能识别的是那些含有 相继两个a或相继两个b的串。
• 自动机到正规式的转换过程如图所示:
• 对0型文法产生式的形式作某些限制, 就是1型、2型、3型文法。
(2)1型文法或上下文有关文法
• 定义:设G=(VN,VT,P,S)为一文 法,若P中的每一个产生式a—>b均满足
|b|≥|a|,仅仅S—> 除外,则G是1型文法
或上下文有关文法。
(3)2型文法或上下文无关文法 • 定每义一:个设 产生G=式(aV—N>,bV满T足,:P,a是S)一为非一终文结法符,,若b属P中于的
用于人工智能的Prolog语言

在示例程序中,添加有关性别的信息: Predicates
parent(symbol)
clauses parent(pam,bo
b). parent(tom,bo
b).
male(tom). male(bob). male( jim).
(3)关系的对象可以是常量 (如:tom,ann) ,也可以是变量(如:X,Y)。
(4)向系统提出问题,可由一个或多个目标组成。
(5)一个Prolog 程序由一些子句(clauses)组成。每个子句用句号结束。
(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。 在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。 否则,说目标不可满足,目标失败了。
parent(Z,X), parent(Z,Y), female(X).
sister(X,pat).
改进的sister规则:
predicates
parent(symbol,symbol)
sister(symbol,symbol)
female(symbol)
male(symbol)
different(symbol,sym
R("zhsan").
4.2 家庭关系程序示例
下图是一个表示家庭关系的实例:
用Prolog 语句表示为:
Pam
Tom
).
Bob
Liz
).
Ann
Pat
Jim
parent(pam,bob
parent(tom,bob
parent(tom,liz). parent(bob,ann). parent(bob,pat).
prolog 语法

prolog 语法Prolog是一种逻辑编程语言,它的语法结构由谓词和规则组成。
以下是Prolog的基本语法规则:1. 事实(Facts):事实是描述真实情况的陈述,使用谓词表示。
例如:father(jack, john)表示"jack是john的父亲"。
2. 规则(Rules):规则定义了与事实之间的逻辑关系。
规则由头部和身体组成,使用":-"连接。
头部是一个谓词,身体是一个由逗号分隔的谓词列表。
例如:man(X) :- father(X, _), male(X)表示"如果X是某人的父亲且X是男性,则X是男人"。
3. 查询(Queries):查询用于检查一个特定条件是否成立。
查询以问号开头,使用谓词表示。
例如:?- man(X)表示"是否存在一个人X是男人"。
4. 变量(Variables):变量用大写字母或下划线开头。
变量在查询时用于接收结果。
例如:?- father(jack, X)表示"是否存在一个人X是jack的父亲"。
5. 列表(Lists):列表由方括号包围,其中的项由逗号分隔。
列表可以包含任何类型的元素,甚至包含其他列表。
例如:[1, 2, 3]表示一个包含数字1、2和3的列表。
6. 运算符:Prolog中的运算符被分为多个优先级和结合性。
常用的运算符包括算术运算符(+, -, *, /),比较运算符(<, >,=<, >=, =:=, \=)和逻辑运算符(,;,!,\+)。
7. 注释(Comments):Prolog中的注释以%开头,直到行末。
这些是Prolog语法的基本规则,但还有许多其他的语法特性和约定可用于更复杂的程序。
PROLOG程序设计

适合的领域 专家系统、规划和其他AI相关问题的求解, AI相关问题的求解 专家系统、规划和其他AI相关问题的求解, 是智能程序设计语言中具有代表性且应用较多 的一种语言。 的一种语言。 自然语言理解、机器定理证明等方面。 自然语言理解、机器定理证明等方面。 和其它语言一样, 和其它语言一样,可以轻松地开发出各种 应用,包括数据库和WEB应用。 应用,包括数据库和WEB应用。 WEB应用
2、规则:从给出的事件推断出的凭据
规则由几个互相有依赖性的简单句(谓词)组成, 规则由几个互相有依赖性的简单句(谓词)组成, 用来描述事实之间的依赖关系。从形式上看, 用来描述事实之间的依赖关系。从形式上看,规则 由左边表示结论的后件谓词和右边表示条件的前提 谓词组成。 谓词组成。 例如,规则 例如, bird(X):bird(X):-animal(X),has(X,feather). 表示凡是动物并且有羽毛,那么它就是鸟。 表示凡是动物并且有羽毛,那么它就是鸟。 travels(liying,X):travels(liying,X):- travels(zhangming,X). 表示张明到哪里旅行,李英就到那里旅行。 表示张明到哪里旅行,李英就到那里旅行。
prolog的条件语句

prolog的条件语句
Prolog是一种逻辑编程语言,它使用基于规则的推理系统来处理查询。
为了实现这种推理,Prolog引入了条件语句的概念,使得我们可以在程序中根据不同的情况执行不同的操作。
在Prolog中,条件语句的基本形式是if-then-else结构。
它的语法如下:
if (condition) then
statement1
else
statement2
其中,condition是一个逻辑表达式,它会被求值为真或假。
如果condition为真,则执行statement1;否则执行statement2。
需要注意的是,Prolog中的条件语句是非确定性的。
也就是说,当condition可以被求值为真或假时,Prolog会尝试所有可能的情况,直到找到一个满足条件的解决方案。
因此,在编写条件语句时,我们需要确保所有情况都被考虑到,以确保程序的正确性。
除了if-then-else结构外,Prolog还支持更复杂的条件语句,如case语句和switch语句。
这些语句在处理多个选择时非常有用,可以让我们更方便地组织程序。
总的来说,Prolog的条件语句为我们提供了一种灵活的控制结构,使得我们可以根据不同的情况执行不同的操作。
在编写Prolog 程序时,我们应该合理地运用条件语句,以实现更加高效和可靠的程
序。
人工智能-逻辑程序设计语言PROLOG

2.1 基本PROLOG 2.2 Turbo PROLOG程序设计
2.1 基本PROLOG
2.1.1 PROLOG的语句
1. 事实(fact)
格式 〈谓词名〉(〈项表〉).
student(john).
like(mary,music).
abc.
repeat.
目标段 该段是放置程序目标的地方。 目标段可以只有一 个目标谓词, 例如上面的例子中就只有一个目标谓词; 也可以含有多个目标谓词, 如 goal readint(X),Y=X+3,write(″Y=″,Y).
就有三个目标谓词。 这种目标称为复合目标。
2.2.2 数据与表达式 1. 领域 1) 标准领域
例 如果把上节的例子程序作为Turbo PROLOG程序, 则应改 写为:
DOMAINS name=symbol
PREDICATES likes(name,name). friend(name,name)
GOAL friend(john,Y), write(″Y=″, Y).
CLAUSES likes(bell,sports). likes(mary,music). likes(mary,sports). likes(jane,smith). friend(john,X):-likes(X,sports),likes(X,music). friend(john,X):-likes(X,reading),likes(X,music).
2.2.3 输入与输出 (1) readln (X) (2) readint (X) (3) readreal (X) (4) readchar (X) (5) write (X1, X2, …,Xn) (6) nl
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
likes(bell,sports). likes(mary,music). likes(mary,sports). likes(jane,smith). friend(john,X):-likes(X,reading),likes(X,music). friend(john,X):-likes(X,sports),likes(X,music). ?-friend(john,Y). //问题:john和谁是朋友
相当于规则头部被消去,目标子句变成
?-likes(X,reading),likes(X,music).
对新目标求解: 子目标的求解过程与主目标完全一样,也是从头对程序 进行扫描,不断测试盒匹配合一等,直到匹配成功或扫描完 整个程序为止。 第一个子目标likes(X,reading),没有可以匹配的事实 和规则,因此求解失败,所以第五条语句失败。 那么,刚才的子目标 likes(X,reading),likes(X,music) 被撤销,系统回溯到原目标 friend(john,Y).
一个变量取了某值就说该变量约束于某值,或者说该变量 被某值所约束,再或者说该变量被某值实例化了。在程序运行 期间,一个自由变量可以被实例化成约束变量,反之,也可。
2. 匹配合一
两个谓词可匹配合一, 是指两个谓词的名相同, 参量 项的个数相同, 参量类型对应相同, 并且对应参量项还满 足下列条件之一: (1) 如果两个都是常量, 则必须完全相同。 (2) 如果两个都是约束变量, 则两个约束值必须相同。 (3) 如果其中一个是常量, 一个是约束变量, 则约束 值与常量必须相同。 (4) 至少有一个是自由变量。
2.1.2 PROLOG的程序 PROLOG程序一般由一组事实、 规则和问题组 成。问题是程序执行的起点, 称为程序的目标。
likes(bell,sports). //描述对象间的关系 likes(mary,music). likes(mary,sports). likes(jane,smith). //同一谓词名排一起 friend(john,X):-likes(X,reading),likes(X,music). friend(john,X):-likes(X,sports),likes(X,music). //描述条件
2.2 Turbo PROLOG程序设计 PROLOG版本:
早期基本为解释型语言; 1986年BORLAND公司推出Turbo PROLOG,它是一种编译 型语言。
特点:
速度快; 功能强; 具有集成化开发环境; 可同其它语言接口; 能实现动态数据库和大型外部数据库; 可直接访问机器系统硬软件和图形、窗口等。
2.2.2 数据与表达式 1. 领域
1) 标准领域 整数、实数、 字符、 串和符号 2) 结构 结构也称复合对象(特殊的参量项), 一般形式为 〈函子〉(〈参量表〉) 函子及参量的标示符与谓词相同,结构包含结构,表达树形 数据结构,如下例子: likes(″Tom″, sports(football, basketball, table_tennis)). //红色部分也是谓词结构,就是复合结 构 reading(″王宏″,book(″人工智能技术导论″,″西安电 子科技大学出版社″)).
例 如果把上节的例子程序作为Turbo PROLOG程序, 则应改 写为:
DOMAINS name=symbol PREDICATES likes(name,name) friend(name,name) GOAL friend(john,Y), write(″Y=″, Y)//输出Y= CLAUSES likes(bell,sports). likes(mary,music). likes(mary,sports). likes(jane,smith). friend(john,X):-likes(X,sports),likes(X,music). friend(john,X):-likes(X,reading),likes(X,music).
则求解目标为
friend(john,Y).
系统对程序进行扫描,寻找能与目标谓词匹配合一的事实或 规则头部。显然程序中前面四条事实均不能与目标匹配,而第 五个语句的左端,也即其头部可与目标谓词匹配合一。该规则 若要成立,须其前提全部成立。
新目标
likes(X,reading),likes(X,music).
2. 规则(rule) 格式 〈谓词名〉(〈项表〉):-〈谓词名〉(〈项表〉){,
〈谓词名〉(〈项表〉)}.
bird(X):-animal(X),has(X,feather).
grandfather(X,Y):father(X,Z),father(Z,Y).
无参量 run:-start,step1(X),step2(X),end. //
2.1.3 PROLOG程序的运行机理
prolog的运行机理就是基于归结原理的演绎推理(归结原理 将在第五章介绍)。 prolog程序的运行是从目标出发,并不断进行匹配、合一、 归结,有时还要回溯,直到目标被完全满足或不能满足时为 止。
1. 自由变量与约束变量
自由变量:无值的变量 约束变量:有值的变量
?-friend(john,Y). //目标:john和谁是朋友
?-likes(mary,X).
或 ?-likes(mary,music).
或
?-friend(X,Y). 或 ?-likes(bell,sports), likes(mary,music), friend(john,X). //三个一起 写出,中间用,隔开
Prolog程序的执行是一个(归结)演绎推理的过程。 特点: (1)推理方式为反向推理; (2)控制策略是深度优先; (3)有回溯。 具体实现方法: (1)匹配子句的顺序是自上而下; (2)子目标选择顺序是从左向右; (3)归结后产生的新子目标总是插入被削去的目标处 (即目标队列的左部)。 PROLOG的这种归结演绎方法被称为SLD归结,或 SLD反驳-消解法。这就是PROLOG程序的运行机理,它就 是所谓的PROLOG语言的过程性语义。
系统从失败的匹配语句处(第五条语句)向下继续扫描程 序中的子句,视图重新使原目标匹配,结果发现第六条语句 的左部即规则 friend(john,X):-likes(X,sports),likes(X,music). 的头部可与目标为谓词匹配。 第一个次子目标likes(X,sports)与程序中的事实立即匹 配成功,且变量X被约束为bell。于是系统便接着求解第二个 子目标。由于变量X已被约束,所以这时第二个子目标已变成 了 likes(bell,music). 由于程序中不存在该事实,所以该目标求解失败。于是, 系统就放弃这个子目标,并恢复X为自由变量,然后回溯到第 一个子目标,重新对它进行求解。
功能 一般表示对象间的因果关系、蕴含关系或对应 关系。
3. 问题(question) 格式 ?-〈谓词名〉(〈项表〉){,〈谓词名〉 (〈项表〉)}. ? -student(john).
? -like(mary,X). 问题就是Horn子句逻辑中的目标子句,只是 形式略有不同 功能 问题表示用户的询问, 它就是程序运行的 目标。 问题可以与规则及事实一同给出,也可以在 程序运行时临时给出。
第2章 逻辑程序设计语言PROLOG
Prolog语言 •Prolog是一种基于一阶谓词的逻辑程序设计语言,它 在AI和知识库的实现技术中具有十分重要的作用。 •Prolog语言是基于Horn子句的,使用归结推理,具有 很强的逻辑描述能力和推理能力。
2.1 基本PROLOG 2.2 Turbo PROLOG程序设计
2.2.1 程序结构
一个完整的Turbo PROLOG(2.0版)程序一般包括常量 段、领域段、数据库段、谓词段、目标段和子句段等六个 部分,其标识及完整程序结构如下(一个程序不一定要包 括所有段): /* 〈 注 释〉 */ 〈编译指令〉 constants 〈常量说明〉 domains 〈域说明〉 // 大多数情况需要,用以说明表、 复合结构及用户自定义的域名 database 〈数据库说明〉 predicates 〈谓词说明〉 //至少有一个 goal 〈目标语句〉//至少且只能有一个 clauses 〈子句集〉 //至少有一个
领域段 该段说明程序谓词中所有参量项所属的领域。 Turbo PROLOG的标准领域包括整数、实数、符号、串和符 号等, 其具体说明如下表所示。
谓词段 该段说明程序中用到的谓词的名和参量项的名(但 Turbo PROLOG 的内部谓词无须说明)
子句段 该段是Turbo PROLOG程序的核心, 程序中的所有事 实和规则就放在这里, 系统在试图满足程序的目标时就 对它们进行操作。 目标段 该段是放置程序目标的地方。 目标段可以只有一 个目标谓词, 例如上面的例子中就只有一个目标谓词; 也可以含有多个目标谓词, 如 goal readint(X),Y=X+3,write(″Y=″,Y). 就有三个目标谓词。 这种目标称为复合目标。
考虑下面的各组谓词是否可匹配合一? pre1(″ob1″,″ob2″,Z) pre1(″ob1″, ″ob3″,Y) pre1(″ob1″,″ob2″,Z) pre1(″ob1″,X, ″ob3″) pre1(″ob1″,″ob2″,Z) pre1(″ob1″,X,Y)
3. 回溯 所谓回溯, 就是在程序运行期间, 当某一个子 目标不能满足(即谓词匹配失败)时,控制就返回到 前一个已经满足的子目标(如果存在的话), 并撤消 其有关变量的约束值, 然后再使其重新满足。 成 功后, 再继续满足原子目标。如果失败的子目标前 再无子目标, 则控制就返回到该子目标的上一级目 标(即该子目标谓词所在规则的头部)使它重新匹配。 回溯也是PROLOG的一个重要机制。
系统重新从下一个事实开始测试。测试到第三个事实时, 第一个子目标便求解成功,且变量X被约束为mary。这样, 第二个子目标也就变成了 likes(mary,music). 再求解,成功。 两个子目标都求解成功,所以原目标也成功,且变量Y被 约束为mary(Y与X的合一关系)。于是,系统回答: Y=mary 程序运行结束。 上述程序的运行是一个通过推理实现的求值过程。