用于人工智能的Prolog语言

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

4.在目标部分,说明程序的目标。一个程序 目标可以由多个字目标复合而成。
5.子句部分,列出全部事实和规则,也可看 作是程序的静态数据。
4.4 Turbo Prolog程序分析
/* 程序名 : Wordsmith 文件名 : prog0501.pro */ /* 目 标 : 查找并打印一单词的同义词或反义词。 */ domains word,syn,ant=symbol predicates synonym(word,syn) antonym(word,ant) goal synonym(brave,X), antonym(brave,Y), write("brave 的同义词是: ",X), nl, write("brave 的反义词是: ",Y), nl. clauses synonym(brave,daring). synonym(honest,truthful). synonym(modern,new). synonym(rare,uncommon). antonym(brave,cowardly). antonym(honest,dishonest). antonym(mordern,ancient). antonym(rare,common).
运行
sister(X,pat).
predicates parent(symbol,symbol) 对所有的X和Y, mother(symbol,symbol) X是Y的母亲, female(symbol) 如果X是Y的父母, male(symbol) clauses 并且,X为女性。 parent(pam,bob). 用prolog规则表示为: parent(tom,bob). mother(X,Y):parent(tom,liz). goal parent(X,Y), parent(bob,ann). parent(bob,pat). female(X). parent(pat,jim).
用于人工智能的Prolog语言
本章主要内容:
•归结原理与Prolog语言 •表与递归
•家庭关系程序示例
•Turbo Prolog程序结构 •Prolog 程序分析 •回溯及控制
•文件与数据库
•字符串处理 •输入与输出
4.1 归结原理与Prolog语言
Prolog 是一种逻辑程序设计语言,基于一阶谓词逻辑,是 典型的叙述型语言(Declaration Language)。 Prolog语言的特点: (1) 建立在一阶谓词逻辑和归结原理基础上,有自动推理功能。 (2) 用Prolog设计应用程序时,仅需指明领域中各对象间的关 系和决策规 则,而应用这些知识的推理由Prolog 完成。 (3) Prolog应用程序,由数据库和规则库组成。 (4) Prolog程序设计要做三件事,即说明事实、定义规则、提 出问题。
运行
改进的sister规则:
predicates parent(symbol,symbol) sister(symbol,symbol) female(symbol) male(symbol) different(symbol,symbol) clauses parent(pam,bob). parent(tom,bob). Pat的姐妹 是谁? parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim). goal male(tom).
5.系统回答
clauses
parent(pam,bob). grandparent parent(tom,bob).
“谁是tom的孙子?” prolog目标语句: parent(tom,X), parent(X,Y).
parent(tom,liz).
parent(bob,ann). parent(bob,pat). 6.系统回答
多元谓词、 多元子句
/* 程序名 : Thesaurus 文件名 : prog0502.pro */ /* 目 标 : 建立一个打印单词的同义词和反义词的小词典。*/ domains word, syn1,syn2,syn3, ant1,ant2,ant3=symbol predicates synonym(word,syn1,syn2,syn3) antonym(word,ant1,ant2,ant3) goal synonym(brave,S1,S2,S3), antonym(brave,A1,A2,A3), write("brave 的同义词是: "), nl, write(S1,",",S2,",",S3,","), write("brave 的反义词是: "), nl, write(A1,",",A2,",",A3,"."),nl. clauses synonym(brave,daring,defiant,courageous). synonym(honest,truthful,open,sincere). synonym(modern,new,novel,recent). synonym(rare,uncommon,scrace,infrequent). antonym(brave,cowardly,fearful,timid). antonym(honest,dishonest,crooked,deceltful). antonym(mordern,ancient,old,obsolete). antonym(rare,common,ordinary,ubiquitous).
M("张三").

完整的Prolog程序:
运行
4.2 家庭关系程序示例
下图是一个表示家庭关系的实例: 用Prolog 语句表示为:
Pam
Tom
parent(pam,bob).
parent(tom,bob).
Bob Liz
parent(tom,liz).
Ann
parent(bob,ann).
Pat
parent(bob,pat).
Prolog 有三种形式的语句: 1. B:- A1,A2,…,An . 含义是 A1 A2... An B ,相当于~A1~A2… ~An B。可视作 人工智能系统中的推理规则。也可将该句看作一个过程,B为过程头,是 过程名,而{A1,A2,…,An }为过程体。 2. A1,A2,…,An . 含义是 A1 A2 ... An F ,相当于~A1~A2… ~An,可视作推 理的目标,或称目标子句。 3. B. 含义是公式B无条件地为真。可视作已知的事实。
Pat的姐妹 是谁?
male(tom). male(bob). male(jim). female(pam). female(liz). female(ann). female(pat). sister(X,Y):parent(Z,X), parent(Z,Y), female(X).
goal
sister(X,pat).
运行
4.3 Turbo Prolog程序结构
一个Turbo Prolog程序通常包括5个部分。如下: /* 注释 */ domains 域说明 database 数据库说明 predicates 谓词说明 goal 目标说明 clauses 子句说明 /* 注释 */
1.域说明部分,说明谓词对象的数据类型。 2.数据库说明部分,包含一些数据库谓词的 定义,是说明用于动态数据库管理的谓词。 如果程序不需要动态数据库,该部分可省略。 3.谓词说明部分,定义程序中除内部谓词以 外的所有谓词。
(5)一个Prolog 程序由一些子句(clauses)组成。每个子句用句号结束。
(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。 在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。 否则,说目标不可满足,目标失败了。
(7)如果有多个回答都满足目标,那么Prolog 将尽可能多地回答。
推理规则
事实
子句 B:- A1,A2,…,An .和子句B.都是仅有一个正文字的子句。称作定子句。
目标子句 A1,A2,…,An .是没有正文字出现的子句。
定子句和目标子句统成为Horn子句。Prolog 子句都是Horn子句。
用Prolog证明三段论: 目标: R("张三"). 推理规则:R(X):- M(X). 事实: M("张三"). predicates M(symbol) R(symbol) clauses R(X):- M(X). M("zhsan"). goal R("zhsan").
2.系统回答
parent(tom,bob).
parent(tom,liz). parent(bob,ann).
3.谁是liz的父母? parent(X,liz).
4.谁是谁的父母? parent(X,Y).
3.系统回答
parent(bob,pat).
parent(pat,jim).
4.系统回答
5.谁是jim的祖父母? 分析:程序中并没有直接的祖父母关 系。此问题可分两步: (1)谁是jim 的父母?假设是Y, (2)谁是Y 的父母?假设是X, X parent Y parent jim Prolog目标语句: parent(Y,jim), parent(X,Y). 6.类似的问题可以是:
如三段论:
x(M(x) R(x)) M(“张三”)
Prolog语句:
推理规则: 事实: 目标: R(X):- M(X). M("张三"). R("张三").
R(“张三”)
证明公式:( (M(X) R(X) ) M("张三") ) R("张三") 恒真 即证明公式:( ( (M(X) R(X) ) M("张三") ) R("张三") ) 恒假 化成公式集: {( (M(X) R(X) ) M("张三") ) , R("张三") } 子句集:{ M(X) R(X) ,M("张三") ) , R("张三") } 目标
Jim
parent(pat,jim).
完整的Prolog程序: predicates
此程序可以回答的问题: 1.bob是pat的父母吗? parent(bob,pat).
parent(symbol, symbol)
clauses parent(pam,bob).
1.系统回答
2.liz是pat的父母吗? parent(liz,pat).
在示例程序中,添加有关性别的信息: Predicates parent(symbol)
clauses
parent(pam,bob). parent(tom,bob). parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim).
mother规则: mother(X,Y):parent(X,Y), female(X).
male(tom). male(bob). male(jim). female(pam). female(liz). female(ann). female(pat).
mother(pat,X).
Pat是谁的母亲?
parent(pat,jim).
以上程序说明的几个重要观点: (1)在Prolog中定义一个关系是容易的,可以通过满足关系的n个对象来表达。 (2)对程序中已定义的关系,用户可以轻而易举地询问Prolog 系统。 (3)关系的对象可以是常量 (如:tom,ann) ,也可以是变量(如:X,Y)。 (4)向系统提出问题,可由一个或多个目标组成。
Z是X的后代。
对应的prolog 语句为:
子句头
子句体 offspring(Y,X):parent(Z,Y), offspring(Z,X).
注意:以上定义的是直接后代关系。
关于sister的规则定义:
predicates parent(symbol,symbol) sister(symbol,symbol) female(symbol) male(symbol) clauses parent(pam,bob). parent(tom,bob). parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim).
male(bob). male(jim). female(pam). female(liz). female(ann). female(pat). sister(X,Y):parent(Z,X), parent(Z,Y), female(X), different(X,Y). different(X,Y):X<>Y.
百度文库
male(tom). male(bob).
male(jim).
female(pam). female(liz).
female(pat). female(ann).
在Prolog中定义offspring(后代)关系 对所有的X和Y, Y是X的后代, 如果X是Y的父母。 对应的prolog 语句为: offspring(Y,X):- parent(X,Y). 对于间接后代: offspring 对所有的X和Y, Y是X的后代, 如果Z是Y的父母,且 Z parent Y offspring X
相关文档
最新文档