Prolog语言(耐心看完-你就入门了)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

功能)
第二、两者均未实例化,eq(X, Y) 恒为真,并 视为同一变量
2017/4/13
第三、均以实例化,由当前值来决定
第四、如果为表,要求对应的元素相等,才为真 第五 、如果是谓词,谓词 同名 ,变元个数相等,
对应的变元相等
2017/4/13
③输入输出谓词
第一、write(X):向输出设备输出实例化结果 第二、read(X): 当 X 未实例化时,输入一个项
2017/4/13
Prolog语言的基本内容
1 项 2 Prolog中的语句 3 表结构 4 Prolog程序的结构
5 常用内部谓词
6 Prolog程序设计步骤
2017/4/13
1 项
符号说明:
“ ::= ” “|” “{}”
2017/4/13
表示“ 定义为 ” 表示 “ 或 ”,可选 表示 “ 重复或者出现多个 ”
用途 :用于标识对象的名字、谓词(对象间的关
系)或函数名 例:john, marry, classmate, teacher
2017/4/13
字符串原子是用引号括起来的符号串
特殊原子指一些特殊符号,如 +、-、*、 / 等
2017/4/13
<项>::= <常量> | <变量> | <复合项>
变量:用于表示暂时不能命名或者不需要命
Prolog语言(或者系统)是以一阶谓词逻辑的 Horn 子句集为语法,以Robinson的消解原理 为工具,加上深度优先的控制策略而形成的人
工智能通用程序设计语言
2017/4/13
Prolog系统
Horn 消 解 原 理
子 句 集
深 度 优 先
2017/4/13
Prolog具有下列特点:
① 是一种描述性语言。只需要告诉 “系统做什
么”,不要告诉系统 “如何做” ② 数据与程序的统一表达。提供一种统一的符
号结构 “项” ,数据与程序都是由项组成
2017/4/13
③ 自动实现模式匹配与回溯。这是人工智能中最常 用的两项操作,Prolog自动实现这些操作
④ 程序易于编写与阅读。它是面向人的自然语言
⑤ 语句句型少,语法简明。只有三种句型
2017/4/13
第三步:回到第一个问题 likes(m, X) ,重新匹
配,得到 { w / X}
likes(m, X) likes(j, X)
第四步:第二个问题变成 likes(j, w)。再与事实 匹配,成功
likes(m, f).
第五步:答案就是 X=w
likes(m, w). likes(j, w). likes(j, s).
2017/4/13
说明:
实际运行中,要逐个试探(搜索),失败 则要回溯,成功也要回溯(求出所有解)
2017/4/13
例:
father(a, b).
father(c, d).
a是b的父亲
brother(a, c). a与c是兄弟关系
uncle(X, Y) :- brother(X, Z), father(Z, Y).
前缀:+(X,*(Y,Z))
来自百度文库
2017/4/13
②比较谓词
eq(X, Y) ne(X, Y) gt(X, Y) X=Y X<>Y X>Y
ls(X, Y)
2017/4/13
X<Y
对于 “= 、<> ”,
X,Y 可以取
常量 变量 谓词 表
2017/4/13
对于“=”(赋值与比较)的几点说明: 第一 、当一个变量已经 实例化 ,则可以与任意 未实例化的变量相等,且将其实例化(赋值
2017/4/13
6 Prolog程序设计步骤
对应于Prolog程序的组成部分,设计步骤分为:
第一、说明事实:说明与待求解的问题有关的事
实。例如,人物事及相互关系,对应于 叙述
性知识
2017/4/13
第二、定义规则:定义个体及其相互关系的推理 规则,反映与待求解问题有关的过程性知识
第三:确定目标(问题):提出待求解的问题或 者确定逻辑推理的目标
2017/4/13
第一个子问题 brother(a, Z) 与事实匹配,得到{c/Z} 代人第二个子问题,有 father(c, U)。与事实匹配,
得到 {d/U},即 U=d,解是:a是d 的叔叔
father(a, b).
brother(a, Z) father(Z, U)
father(c, d).
?- uncle(a, U).
问题: a 是谁的叔叔 ? ( U = ? )
2017/4/13
Prolog的求解过程:
第一步:问题 uncle(a,U) 与事实逐个匹配,
不成功
father(a, b). father(c, d).
brother(a, c).
2017/4/13
uncle(a,U) uncle(X, Y) :- brother(X, Z) , father(Z, Y). 第二步:与规则头(左部)匹配,即寻找合一者, 有 {a/X, U/Y} 转化为两个子问题:brother(a, Z)和father(Z, U)
项的定义:
<项>::= <常量> | <变量> | <复合项>
2017/4/13
<项>::= <常量> | <变量> | <复合项>
<常量>::=<原子> | <数> <原子> ::= <标识符原子> | <字符串原子> | <特殊原子>
2017/4/13
标识符原子
命名 :用小写字母或者小写字母开头的小写字母 数字串
2017/4/13
程序的一般结构(组成部分)
Visual Prolog程序包括三到四个基本程序段:
第一、域段:说明谓词变量的域(类型) 第二、谓词段:说明非标准谓词(用户自己的
①若与另一个未实例化的变量 匹配 ,则视为同一变
量,两者共享
②若与另一个实例化的变量 匹配 ,也变成了实例化 的变量,且两者同值
③若与常量匹配,也变成了实例化变量,并取常量
的值
2017/4/13
第三、常量只能与相同的常量匹配
第四、实例化的变量与另一个实例化的值相同的 变量匹配,也可以与另一个未实例化的变量匹
2017/4/13
注意:
这两部分不能颠倒。必须前提部分写在前 面,问题部分写在后面
2017/4/13
likes(m, f).
likes(m, w).
likes(j, w). likes(j, s).
(事实)
f m j s w
goal
likes(m, X), likes(j, X). (问题) 问题:是否 m 和 j 都喜欢什么东西?( X = ? )
复合项:由一组其它对象组成的单个对象
例: 函数项: like(john, apple) 表: [sa, sb], [1,2,3]
表达式: (12+59)*49-96
2017/4/13

常量 原子
标 识 符 原 子
2017/4/13
变量 数
特 殊 原 子
复合项
字 符 串 原 子
<原子>(<项>{, <项>}) <项> <原子> <项> { <原子> <项> }
2017/4/13
]”来表示,元素之间用逗号或者空格分
例:
[1, 2, 3]
[a, b, c, d]
2017/4/13
用符号“ | ”来划分表头(第一个元素)和表尾
(其余元素)
特例: 当只用一个元素时,表尾为空 空表(无元素),既无表头又无表尾
2017/4/13
例: P([the, cat, sat, down]).
2017/4/13
关于 fail 的说明:
作为一个子目标,使 Prolog 程序运行到 fail,
必定引起回溯
2017/4/13
例:求 1 到 n 之间的和
定义一个二元谓词 sum(N, X),其中 X 表示和 sum(1,1):-!. sum(N,R):- N1=N-1, sum(N1, R1), R=R1+N. ?- sum(6,X). 答案是:X=21 去掉“ !”,会发生什么?
名的对象,用大写字母开头
2017/4/13
特殊变量:空变量,记作:“_”
含义:我们对问题的某一个变量的值不关心
2017/4/13
<项>::= <常量> | <变量> | <复合项>
<复合项> ::= <原子>(<项> { , <项> })| <项> <原子> <项> { <原子> <项> }
2017/4/13
2017/4/13
③问题(目标) Goal
Q1 , Q2 , … , Qm
.
含义:待回答的问题,即 Q1 , … , Qm 同时
2017/4/13
为真吗?
从消解角度来看: ①(事实)中,P是Horn子句
2017/4/13
②(规则)可以表示为
P1∧P2∧…∧PnP
可以转化为 ~P1∨~P2∨…∨~Pn∨P 也是Horn子句,并受全称量词约束
?- P([ X | Y ]).
答案:X=the, Y=[cat, sat, down]
?-P([ X , Y | Z ]).
答案:X=the, Y=cat,Z=[sat, down]
2017/4/13
4 Prolog程序的结构
Prolog的程序分为两部分:
前提部分:所有事实和规则 问题部分:目标子句序列
2017/4/13
第二步:f 代替第二个问题 likes(j, X) 中的 X,
则得 likes(j, f) 。再与事实匹配,不能匹配, 失败,则回溯,忘掉刚才的匹配
likes(m, f). likes(m, X) likes(j, X) likes(m, w). likes(j, w).
likes(j, s).
brother(a, c).
2017/4/13
Prolog的实现方法主要是:匹配与回溯
匹配:合一过程、消解过程 回溯:搜索,而且是深度优先搜索
2017/4/13
关于匹配的几点说明: 第一 、一个变量 被置换 后,代入了另一个 项 , 则称该变量为实例化的变量
2017/4/13
第二、一个未实例化的变量可以与任何项匹配:
2017/4/13
参考资料:
1 雷英杰,张雷,邢清华,孙金萍。Visual Prolog 语言教程。西安:陕西科学技术出版社,2002
年2月(380页,35元)
2 雷英杰,邢清华,孙金萍,张雷。Visual Prolog 编程、环境及接口。北京:国防工业出版社, 2004年1月(412页,36元)
配,使另一个变量实例化,且约束值相同
2017/4/13
5 常用的内部谓词
内部谓词:Prolog系统本身定义的一些基本谓词
注意:可以直接使用,用户不能修改
2017/4/13
①算术运算
算术表达式由操作数(数、变量)、操作符和括
号组成
算术运算符号:“+、-、* 、/”(加减乘除)
2017/4/13
优先级:与通常的数学运算一致 形式:中缀:X+Y*Z




Artificial Intelligence (AI)
2017/4/13
Prolog 语言简介
Prolog语言是一种以一阶谓词为基础的逻辑性语
言(Programming in Logic)
2017/4/13
Prolog语言的特点
Prolog语言的基本内容
简单的例子
2017/4/13
Prolog语言的特点
当 X 在输入前已经实例化,则读入项将与 X
匹配,根据匹配的成功与否,决定其真假值
2017/4/13
④谓词cut与fail(特殊谓词):
cut ( ! ):禁止回溯
fail: 强迫回溯
2017/4/13
关于cut的几点说明: 第一、只允许作为一个子目标出现在程序中 第二、第一次遇到它时,总是立刻被满足,但是 不能被重新满足 第三、用户可以使用它来控制回溯方式,切断一 些不必要的回溯,提高程序运行效率
2 Prolog中的语句
Prolog中的语句分成三种形式: ①事实: P. 含义:无条件成立,恒为真 例:like( monkey, banana)
2017/4/13
②规则: P :- P1 , P2 , … , Pn .


“ :- ”
“ ,”
表示“蕴涵”
表示“合取”
含义:若 P1 , … , Pn 均为真时,P为真
2017/4/13
③(问题)是
Q1∧…∧Qm
受存在量词约束,取非后 ~Q1∨…∨~Qm 受全称量词约束,是Horn子句
2017/4/13
Prolog三种形式的语言都是Horn子句
问题求解就是Horn子句集消解
2017/4/13
3 表结构
表:若干个元素的有序序列
表中的元素:常量、变量、项、表
表用“[ 开
2017/4/13
likes(m, f).
likes(m, w).
likes(j, w).
Prolog的求解过程
likes(j, s).
现在有两个问题:likes(m, X) 和 likes(j, X)) 第一步 :第一个问题 likes(m, X) 去与事实匹配
(置换与合一),按顺序得到 {f/X}
相关文档
最新文档