知识工程T-PROLOG
Prolog语言(耐心看完-你就入门了)剖析

Prolog的求解过程:
第一步:问题 uncle(a,U) 与事实逐个匹配, 不成功
2024/8/13
father(a, b). father(c, d). brother(a, c).
uncle(a,U) uncle(X, Y) :- brother(X, Z) , father(Z, Y). 第二步:与规则头(左部)匹配,即寻找合一者, 有 {a/X, U/Y} 转化为两个子问题:brother(a, Z)和father(Z, U)
人工智能
Artificial Intelligence (AI)
2024/8/13
Prolog 语言简介 Prolog语言是一种以一阶谓词为基础的逻辑性语 言(Programming in Logic)
2024/8/13
Prolog语言的特点 Prolog语言的基本内容 简单的例子
2024/8/13
例: P([the, cat, sat, down]).
?- P([ X | Y ]). 答案:X=the, Y=[cat, sat, down]
?-P([ X , Y | Z ]). 答案:X=the, Y=cat,Z=[sat, down]
2024/8/13
4 Prolog程序的结构
Prolog的程序分为两部分: 前提部分:所有事实和规则 问题部分:目标子句序列
2024/8/13
Prolog的求解过程
likes(m, f). likes(m, w). likes(j, w). likes(j, s).
现在有两个问题:likes(m, X) 和 likes(j, X))
第一步:第一个问题 likes(m, X) 去与事实匹配 (置换与合一),按顺序得到 {f/X}
知识程序设计语言LISP和PROLOG综述

K y r s LIP e wo d S
P L RO OG
C mp r o o ai n s
C aa tr t s h rce i i sc
LIP ( t r es g 语 言 和 P O O ( mg m gi S Li o si ) sP c n R L G P r m i a n n
一
法结构 , 语句 中的一切成分都是 以函数的形式给 出的。 定义 ( 函数名 形式参数表 ) ( 函数定义体 )l ’ LIP语言是 16 由美国麻省理工学院著名计算机专家 S 90年 : }定义段 J .. ry n C t 教授设计 实现 的 , M ah 后来 发展为许 多不同 的版 本 , 定义 ( 函数名 形式参数表 ) ( 函数定义体 ) J 在人工智能研究领域得到了广泛 的应用。
杂 结构 。例 如 , 过符号 表达 式 (B 通 IM ( 2 i 2f o ue A kn o mpt d C r C m av ( edu r r, Y )可以描述 I M公司的一些基本 o pn ) H aq at s N C ) e B
在其它程序设计语言或我们平常的书写习惯 中,总是将运 算符写在两个操作数 中间 , 1 2 如 + ,这种表示法称 为中缀 表达
LIP程序 的通常形式是 一系列 函数定义 , S 其后跟着 一系 体现 出来 。Li p中没有语 句概念 , s 也没有分程序结构或其它语
l i) o c 语言 , 为人 工智 能程序设计语 言族 中应用最为广 泛的 列带有参数的函数调用 ,函数之间的关系只是在调用执行时才 g 作
两种语言。是两种完全不同类 型的程序设计语 言, 各有特点 。
都 可 用 表 表 示 。这 使 得 它 与 一 般 高 级 程 序 设 计 语 言 如 F R R N A G LP S A O T A 、 L O 、A C L等有着很 大的不 同。在 LIP语言 S 中, 由二进制数形成的类似单词 的基本对象称为原子 ,原子组 合成表 , 表可进 一步组合成高级表 , 能表示句子、 文章等任意复
Turbo Prolog 知识初步

Turbo Prolog 知识初步Turbo Prolog的常量和变量1.常量常量是用来命名特定对象和特定关系的一种符号,它描述的对象是已知的或具体的。
在Turbo Prolog中合法的变量有以下四个方面:(1)整数和实数,如2004、89.2、0;(2)用小写字母打头的由字母、数字(0-9)串、下划线("_")组成的字符序列,如abcdef、may_be、tabel;(3)复合对象(如student("张三"))和表(如[1,2,3,4,5]);(4)单引号内的单个字符(如'#'、'a')或双引号内的任何字符序列,如"中国"、"PDC Prolog"。
2.变量变量是用来代表某些尚不能命名的对象,通常有八种取值,即:整数、实数、字符、串、符号、复合对象和表。
变量名是以大写字母或下划线打头的字母、数字(0-9)串序列,中间可插有下划线,如What、_Work_NAME3。
在Prolog中,有一个特殊的变量,不需要知道它是什么,也用不着它的名字,称匿名变量。
用单一的下划线来表示匿名变量。
例如,若要知道是否有人想跳舞,但不需要知道这个人的名字,就可以用匿名变量来表示。
Turbo Prolog常用的数据类型Turbo Prolog常用的数据类型(也称为标准领域)包括整数、实数、字符、字符串和符号等几种类型,具体说明如下表所示。
Turbo Prolog常用的数学函数Turbo Prolog中常用的数学函数如下表所示。
Prolog中的表表是Prolog中一种非常有用的数据结构。
表的表述能力很强,数字中的序列、集合,通常语言中的数组、记录等均可用表来表示。
表的最大特点是其长度不固定,在程序的运行过程中可动态地变化。
具体来讲,就是在程序运行时,可对表施行一些操作,如给表中添加一个元素,或从中删除一个元素,或者将两个表合并为一个表等。
用于人工智能的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编程。
一、Prolog语言简介Prolog是“Programming in Logic”的缩写,它的特点是以谓词逻辑为基础,通过规则和事实之间的逻辑关系进行推理和查询。
Prolog程序由一组规则和事实构成,并通过提出查询来运行程序。
其独特的逻辑编程方式使得Prolog在人工智能、专家系统、自然语言处理等领域有着广泛的应用。
二、Prolog语法1. 数据类型:在Prolog中,有几种基本的数据类型,包括原子(atom)、数字(number)、变量(variable)和复合(compound)数据类型。
每个数据类型都有其特定的表示方法和使用规则。
2. 规则和事实:Prolog程序由一组规则和事实构成。
规则由头(head)和体(body)组成,头部是一个谓词,体部是一个查询条件。
规则描述了一个逻辑关系,当查询满足规则中的条件时,将会得到规则中定义的结果。
3. 查询:Prolog程序需要通过提出查询来运行。
查询是一个谓词,通过与规则中的条件进行匹配来得到满足查询条件的结果。
Prolog会在规则和事实中搜索匹配的项,并返回匹配的结果。
三、Prolog编程实例接下来,我们将通过几个实例来演示Prolog语言的具体应用。
1. 父子关系查询:```father(john, david).father(john, ann).father(david, mary).- father(john, X).```该查询将会返回所有满足父亲为john的人。
2. 数字求和:```sum(0, 0).sum(N, Result) :- N > 0, M is N-1, sum(M, SubResult), Result is SubResult + N.- sum(5, X).```该查询将会返回数列1到5的和。
PROLOG程序设计

适合的领域 专家系统、规划和其他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简单教程

likes(tom,wine). likes(tom,book).
* 程序内goal则是找到一个解就停止搜索了 例:predicates likes(symbol,symbol) goal likes(tom,W),write(―tom likes ‖,W,‖\n‖). clauses likes(tom,food). likes(tom,wine). 程序内goal 运行结果 likes(tom,book). Dialog Tom tom likes food
3、影响回溯的手段——fail和cut
注意:Turbo Prolog ―外Goal‖ 和“程序内goal‖ 有“勤” “懒” 之分 * 对话框中输入的外Goal主动找出全部解并报告有几个 外Goal运行情况 Solutions Dialog 例:predicates Goal:likes(tom,What) likes(symbol,symbol) What=food What=wine clauses What=book likes(tom,food). 3 Solutions
•
表(List)
——
•
表由方括号与元素组成,元素又可是一个表。 非空表可用[x|y]表示,x—表头 y—表尾 • 例: [a,b,c] [a | [b,c]] 表头 a
表尾 [c]
[c]
[b | [c]]
[c | []]
表头 b 表尾 [c]
表头 c 表尾 []
空表无表头!
匹配与回溯
GOAL(目标)
predicates 运行 thief(symbol) Dialog likes(symbol,symbol) Goal : may_steal(john,What) may_steal(symbol,symbol) What=food clauses What=wine thief(john). 2 Solutions likes(tom,food). likes(john,wine). likes(john,X):- likes(tom,X). may_steal(X,Y):- thief(X),likes(X,Y).
知识库语言—Prolog与Datalog

知识库语言—Prolog与Datalog
曾亮
【期刊名称】《教育技术导刊》
【年(卷),期】2009(000)012
【摘要】知识库语言是一类适应人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。
它能够用来编写程序求解非数值技术、知识处理、推理、规划、决策等具有智能的各种复杂问题。
论述了知识库语言Prolog与Datalo语言的语句结构、特点,并且给出了程序设计的实例加以说明。
【总页数】3页(P58-60)
【作者】曾亮
【作者单位】中南民族大学计算机科学学院,湖北武汉430074
【正文语种】中文
【中图分类】TP312
【相关文献】
1.PROLOG知识库与关系数据库之间的相互转换法 [J], 吴成茂
2.应用Visual Prolog及数据库技术建立骨肿瘤辅助诊断系统知识库 [J], 刘敬华
3.基于Prolog语言的商品推荐知识库模型 [J], 汲业;陈燕;屈莉莉;张琳
4.从数据库生成PROLOG知识库 [J], 冯少荣
5.基于Visual Prolog及数据库技术构建母猪饲喂专家系统知识库的研究 [J], 刘伯强;童淑敏
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PROLOG语言PROLOG是英文“PROgramming in LOG”的缩写,意思为逻辑程序设计,它最早由R·Knowalski首先提出。
世界上第一个PROLOG系统于1972年由A·Colmerauer及其研究小组在法国马赛研制成功。
PROLOG以逻辑程序设计为基础,最初设计PROLOG的目的是作为处理逻辑推理问题的会话式语言,并以处理一阶谓词演算为背景。
后来,由于PROLOG 具有简洁的文法,丰富的表达力和独特的非过程型等特点,从而日益受到了计算机界的重视,引起了越来越多的人的注意,现在PROLOG语言已被广泛应用于关系数据库、抽象问题求解、数理逻辑、公式处理、自然语言理解、专家系统以及人工智能的许多领域。
PROLOG是一种人工智能语言,它同其它大多数程序设计语言一样,也有许多不同的实现系统,它们具有各自的语义语法特色。
本章主要介绍一种称为“核心PROLOG”的标准文本,目前,多数PROLOG系统基本上遵从这个标准文本的规定。
一、PROLOG的基本内容1.PROLOG的特点作为一种程序设计语言,PROLOG具有两方面的特性:一是它描述求解问题的方式;二是语言本身的特点。
如众所周知,用通常程序设计语言(如FORTRAN,PASCAL)来解问题时需指明算法,即对一给定的问题指明一系列计算机要执行的计算步骤,告诉计算机“如何做”。
与这些通常的程序设计语言不同,PROLOG语言求解问题时,要求程序员描述所解问题中的对象和反映它们之间关系的某些已知事实,描述和定义诸对象和它们之间关系的某些规则。
它强调描述对象(和事实)之间的逻辑关系,程序员一般不必告诉计算机运行执行的先后次序。
因此,从能够描述问题本身,而不必描述求解问题的详细计算步骤这一点讲,PROLOG 是更高级的语言,它可看作为一种描述性语言。
目前,人们往往把语言分为函数型语言、逻辑型语言和其它语言,这是因为这三类语言在性质上和描述问题的方式上有着很大的差异。
PROLOG 语言除了上述的特性外,还有下面一些特点:①PROLOG 的数据和程序结构统一,PROLOG 提供一种一致的数据结构,称为项(term )。
所有数据和程序都由项构造而成的。
在智能程序中常需要将一段程序的输出数据作为新产生的程序来执行,因此人工智能语言就具有数据和程序结构一致的特性,LISP 在这方面是当之无愧的,它的程序和数据都是S —表达式。
而PROLOG 也不逊色,它的程序和数据都是以项为基本单位,并且都是树型结构。
②PROLOG 能够自动实现模式匹配和回溯,这些是人工智能系统中最常使用的,最基本的操作。
由于PROLOG 系统提供了自动完成这些操作的功能,使用户在PROLOG 语言这一级上不必考虑这些问题。
③与LISP 语言一样,递归是PROLOG 语言的重要特点,它反映在程序和数据结构中,由于这一特性,一个大的数据结构常常能够由一个小的程序来处理。
PROLOG 的所有这些特性,使得PROLOG 语言特别适用于描述智能程序,因此人们习惯把PROLOG 称为人工智能程序设计语言,并将它作为进行人工智能系统设计的工具。
2、PROLOG 的简单实例我们从一个简单例子开始介绍PROLOG 程序,设有一有向图,如图6-8所示,现用PROLOG 来描述图中的两点之间的关系。
图6-8 一个简单的有向图例子若用connected(X,Y)表示从X到Y有一条有向边,则图6-8可用下面的PROLOG事实来描述:connected(e,b).connected(c,d).connected(d,e).现在定义两点有通路的概念,点X到Y有通路是指:①X到Y有一条有向边。
②存在一点Z,X到Z有一条有向边,并且Z到Y有一通路。
上面这个通路的定义,可以用PROLOG的规则来描述:path(X,Y):—connected(X,Y).path(X,Y):—connected(X,Z),path(Z,Y).这path(X, Y)表示X到Y有一通路,符号“:—”表示“如果”,逗号“,”表示“并且”。
因此上面第一条规则的含义是:如果X到Y有一条有向边,则X到Y有通路。
第二条规则的含义是:如果X到Z有一条有向边,并且Z到Y有通路,则X到Y有通路。
输入了上述事实的规则之后,就可以向机器询问图中各点之间的关系。
?—path(a, b). a到b有通路吗?yes?—path(b, a). b到a有通路吗?no?—path(d, Y). d到哪一点有通路?Y=e (Y代表变量)?—path(b, X),path(c, X).x=d以上就是一个简单的PROLOG程序,以及一旦这个程序进入机器后,用户以会话方式运行这个程序的情况:从这个实例中,我们可以看出,PROLOG语言提供了三种基本语句:①事实:它说明一个问题中的对象和它们之间的关系的一些已知事实。
②规则:它用来定义对象和它们之间的关系,用来描述一个事实依赖于其它一组事实。
③用来询问有关对象和它们之间的关系。
3.事实从上一节看到,为了表达从点a到b有一条有向边这一事实,写了connected(a, b)。
这个事实由两个对象(a和b)以及一个关系(connected)所组成。
在PROLOG中事实一般形式是:①首先写关系,接着是括在一对圆括号内的若干对象,对象间用逗号隔开。
②对象和关系名必须以小写字母开头。
③在事实的末尾名必须写上实心点“·”。
在PROLOG中,关系connected被称为谓词,括号中的(a, b)被称为变元,谓词名是任意的,变元的个数也是任意的,但应注意在圆括号中的诸变元的书写次序。
实际上,这种次序是任意的,但在书写事实时必须确定某种次序,一旦确定后,在以后这一事实的使用时要保持这种次序的一致性,例如事实connected(a, b)是指从点a到b有一条有向边,下面是一些事实例子以及解释:on(book, desk). 书在桌子上面owns(john, book). john有书valuable(gold). 金是值钱的father(john,mary). joho是mary的父亲play(jane, jin, badminton) . jane和jin打羽毛球4.规则假设我们要叙述这样的事实:john喜欢所有的人,表示这一事实的一种方法是写出下列所有各个事实:likes (john, david).likes (john, tom).likes (john, jane).…显然这种表示法是不方便的。
因此表示john喜欢所有人的另一种方法是把它说成:“john喜欢任一对象,只要这一对象是人。
”于是,便可以用下面的规则来表示:likes(john, X):—person(X).它的含义是:如果X是人,则john就喜欢这个X所指的人。
注意,这里X 是大写字母代表变量。
在PROLOG中,当你要描述一个事实依赖于其它一组事实时,则用规则来表示。
我们用“如果”、“则”来表示一个规则,例如:“如果某人有钱,则他就买汽车。
”用规则描述为:buy(X, car):-have(X, money).规则可用来表示定义,例如:如果X是一动物,并且X有羽毛,则X是鸟。
bird(X):-animal(X), feather(X).从上面例子可以看出:规则是诸对象和它们的关系的一般陈述。
一个规则由头和体组成。
头是:—符号的左部,体是“:—”符号的右部。
“:—”的意思是如果,规则以“.”结尾。
规则的头描述了这条规则企图定义的事实。
规则的体描述了一些目标的连结。
为使头成为真的,这些目标必须逐个被满足。
体中目标一个接着一个写,中间用逗号“,”分开,逗号的意思是并且,它们把体中目标连结起来。
现把规则的各部分形象地描述如下:bird(X) :- animal(X),feathers(X).头如果并且体这里的“:—”也读作“只要”。
显然规则的这种形式类似于Horn子句。
通常一个谓词能用事实和规则的混合来定义。
例:likes(john, food).likes(john, X):- person(X).我们再举出规则的几个例子:John喜欢任何喜欢讲话的人。
换句话说,John喜欢某个人,如果这个喜欢讲话。
用规则表示:like(john, X):-person(X), likes(X, talk).如果我们希望表示,John喜欢任何喜欢讲话和游泳的人,则只要简单地加一目标到上面体中,并用逗号隔开。
likes(john,X) :- person(X), likes(X, talk),likes(X, swim).若要表示父母和(外)祖父母等关系,可用下列规则:parent(X, Y):—mother(X, Y).parent(X, Y):—father(X, Y).grandparent(X, Y):—parent(X, Z), parent(Z, Y).5.询问我们可以对一些事实询问,在PROLOG中一个问题很象一个事实,只要在它前面加一特殊符号“?—”。
例如:?—owns(mary, book)其意思是Mary有这本书吗?或Mary有这本书是真的吗?但不能问她是否有所有的书。
当询问时,PROLOG要搜索事先输入的事实组成的数据库,看是否有事实与问题相匹配。
当事实与询问的关系相同且相应的自变时也相同时,我们说二者相匹配。
如果PROLOG找到一个事实与问题相匹配,则回答“是”;否则,数据库里无此事实则回答“否”,上面询问中的owns(mary,book), 又称为目标,或者说询问自由目标组成。
假设已有如下事实。
on(book, desk).owns(john, book).female(jane).play(jane,jin, badminton).valuable(gold)则可以问:?—female(jane).yes?—owns(john, moon).no这里下划线的部分表示PROLOG回答的信息(以下同)。
?—male(tom).no对前面两个问题的回答是清楚的。
对第三个问题,PROLOG也回答no,这是因为数据库中没有这样的事实,这个no意味着“就我所知,这是不对的。
”因此系统回答no有两种意思:不或者不知道。
显然,仅仅询问这样的问题。
获得yes和no的回答是不够的。
询问象“John 有什么东西?”,“谁与谁打羽毛球?”也是用户常提出的问题,但这些问题必须借助变量来提出。
如下所示:?—owns(john, X)X=book?—play(X, Y, badminton)X=jane, Y=jin?—owns(X, book).X=john在介绍规则时,我们曾引入“连结”的概念,即用逗号“,”把一规则体中的多个目标连结在一起,这里“,”表示“并且”。