Prolog的语言(耐心看完你就入门了).ppt

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

string: 用双引号括起来的字符序列 例:“I am from Nanjing” symbol:有两种形式: 以小写字母开头的字母、数字和下划线组成的序列 用双引号括起来的字符串序列 Prolog中表示成下列形式: integerlist = integer * “integer” 说明表中元素的类型 “* ” 告诉编译系统,这是一张表 表: 例 domains title , author = symbol pages = integer 注:每一个说明的最后无句号 “ . ” 谓词段(predicates) 说明用户自己定义的谓词 说明谓词变元的域 谓词名: 由小写字母开头,由字母、数字和下划线组成(标识符原子) 谓词变元的类型 标准域 域段中说明的其它域 例: domains person = symbol predicates father(person) 或者 father(symbol) alphabet_position(char, integer) 谓词后面无句号 “ . ” 子句段(clauses) 由事实与规则组成 说明: 每一个事实或规则后面必须有句号“ . ” 例: clauses likes(tom, football). classify(X, negative):- X0. classify(X, positive):- X0. 目标段(goal) 必须书写一个目标段,作为源码的一部分(内部目标) 外部目标 例 goal likes(tom, X). 注释: 多行注释:/* …… */ (C/C++中采用的符号) 单行注释:% (Matlab中采用的符号) Visual Prolog 程序的基本结构: domains ……(说明变量类型,无句号) predicates ….. (说明谓词,无句号) clauses ….. (程序段,必须有句号) goal …… (目标或问题,必须有句号) 3 例子 注意: 这两部分不能颠倒。必须前提部分写在前面,问题部分写在后面 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) 第一

文档评论(0)

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

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

1亿VIP精品文档

相关文档