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

合集下载

Prolog语言简介

Prolog语言简介
2019/11/18
<项>::= <常量> | <变量> | <复合项>
<复合项> ::=
<原子>(<项> { , <项> })|
<项> <原子> <项> { <原子> <项> }
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。
教材类别:“十一五”国家级规划教材
教学大纲 一、课程的性质和目的
人工智能是计算机科学与技术的一个前沿学科,它也 是一个综合性的交叉学科。《人工智能导论》为计算机科 学技术专业和软件工程专业的一门任选课,其目的是使学 生初步了解人工智能的基本原理,初步学习和掌握人工智 能的基本技术,以便拓宽知识面,并为进一步学习和应用 奠定基础。

程序设计语言基础精品文档

程序设计语言基础精品文档
A.a
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语言

用于人工智能的Prolog语言
(7)如果有多个回答都满足目标,那么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是一种逻辑编程语言,它的语法结构由谓词和规则组成。

以下是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程序设计

PROLOG程序设计
事实用来说明一个问题中已知的对象和它们之间 的关系。 Prolog程序中 程序中, 的关系。在Prolog程序中,事实由谓词名及用括号 括起来的一个或几个对象组成。 括起来的一个或几个对象组成。谓词和对象可由用 户自己定义。 户自己定义。 例如,谓词likes(bill,book). 例如,谓词likes(bill, likes(bill 是一个名为like的关系,表示对象bill和 是一个名为like的关系,表示对象bill和book like的关系 bill 之间有喜欢的关系。 之间有喜欢的关系。 travels(zhangming,beijing). 张明到北京旅行。 张明到北京旅行。
适合的领域 专家系统、规划和其他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引入了条件语句的概念,使得我们可以在程序中根据不同的情况执行不同的操作。

在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

人工智能-逻辑程序设计语言PROLOG
第2章 逻辑程序设计语言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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 程序运行结束。 上述程序的运行是一个通过推理实现的求值过程。
相关文档
最新文档