Prolog语言简介.ppt

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Prolog语言简介剖析

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 Prolog的求解过程 现在有两个问题:likes(m, X) 和 likes(j, X)) 第一步:第一个问题 likes(m, X) 去与事实匹配(置换与合一),按顺序得到 {f/X} likes(m, f). likes(m, w). likes(j, w). likes(j, s). 第二步: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) 第三步:回到第一个问题 likes(m, X) ,重新匹配,得到 { w / X} 第四步:第二个问题变成 likes(j, w)。再与事实匹配,成功 第五步:答案就是 X=w likes(m, f). likes(m, w). likes(j, w). likes(j, s). likes(m, X) likes(j, X) 说明: 实际运行中,要逐个试探(搜索),失败则要回溯,成功也要回溯(求出所有解) 例: 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 = ? ) 第一步:问题 uncle(a,U) 与事实逐个匹配,不成功 Prolog的求解过程: father(a, b). father(c, d). brother(a, c). 第二步:与规则头(左部)匹配,即寻找合一者,有 {a/X, U/Y} 转化为两个子问题:brother(a, Z)和father(Z, U) uncle(X, Y) :- brother(X, Z) , father(Z, Y). uncle(a,U) 第一个子问题 brother(a, Z) 与事实匹配,得到{c/Z} 代人第二个子问题,有 father(c, U)。与事实匹配,得到 {d/U},即 U=d,解是:a是d 的叔叔 father(a, b). father(c, d). brother(a, c). brother(a, Z) father(Z, U) Prolog的实现方法主要是:匹配与回溯 匹配:合一过程、消解过程 回溯:搜索,而且是深度优先搜索 关于匹配的几点说明: 第一、一个变量被置换后,代入了另一个项,则称该变量为实例化的变量 ①若与另一个未实例化的变量匹配,则视为同一变量,两者共享 ②若与另一个实例化的变量匹配,也变成了实例化的变量,且两者同值 ③若与常量匹配,也变成了实例化变量,并取常量的值 第二、一个未实例化的变量可以与任何项匹配: 第三、常量只能与相同的常量匹配 第四、实例化的变量与另一个实例化的值相同的变量匹配,也可以与另一个未实例化的变量匹配,使另一个变量实例化,且约束值相同 5 常用的内部谓词 内部谓词:Prolog系统本身定义的一些基本谓词 注意:可以直接使用,用户不能修改 ①算术运算 算术表达式由操作数(数、变量)、操作符和括号组成 算术运算符号:“+、-、* 、/”(加减乘除) 优先级:与通常的数学运算一致 形式:中缀:X+Y*Z 前缀:+(X,*(Y,Z)) ②比较谓词 eq(X, Y) X=Y ne(X, Y) XY gt(X, Y) XY ls(X, Y) XY 对于 “= 、 ”, X,Y 可以取 常量 变量 谓词 表 第一、当一个变量已经实例化,则可以与任意未实例化的变量相等,且将其实例化(赋值功能) 第二、两者均未实例化,eq(X, Y) 恒为真,并视为同一变量 对于“=”(赋值与比较)的几点说明: 第三、均以实例化,由当前值来决定 第四、如果为表,要求对应的元素相等,才为真 第五、如果是谓词,谓词同名,变元个数相等,对应的变元相等 ③输入输出谓词 第一、write(X):向输出设备输出实例化结果 第二、read(X): 当 X 未实例化时,输入

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档