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}
第四章prolog语言
a
b
c
d
e
若采用path(X,Y)表示X和Y之间有一通路,则用PROLOG规
则可描述为: • • path (X,Y) :- connected (X,Y). path (X,Y) :- connected (X,Z),path (Z,Y).
• 符号 “:-”表示“如果”,或者可以理解为一种蕴含→; • “,”表示并且(and)。
3、询问解释 针对上面关于两点间的通路的事实和规则一旦在计算机上 建立,就可做如下提问: a b • ?-path (a,b). a到b有通路吗? Yes 有 c d e • ?-path (b,a). b到a有通路吗? No 没有 • ?-path (d,Y). d到哪一点有通路 y=e d到e点有通路 • ?-path (b,X), path (c,X). 是否存在一点X,使得b 和c有通路到达点X? x=d • ?-connected (a,d). a到d有一条有向边吗? No 没有
一、PROLOG语言特点(续3)
• 4. prolog程序实际上是一个智能数据库 prolog的原理就是关系数据库,它是建立在关系 数据库的基础上的。 • 它和SQL数据库查询语言有很多相似之处。使用 prolog可以很方便的处理数据。 • 5. 递归功能 递归是prolog和lisp语言的重要特点,这一特点使得 一个大数据结构能够用一个小的程序来处理。
它是在1960年作为定义数学函数的一种记法来介绍的但因其具有较强的符号处理功能和较灵活的控制结构特别适合于人工智能的研究最大的特点就是适合于处理表格利用表格的递归性进行推理从而很快受到了人工智能工作者的青睐在很长的一个时期内lisp语言一直被用作人工智能系统的主要设计语言
第四章 Prologe 程序语言设计
prolog语言简介
例:
自动实现的搜索算法之二——回溯 回溯
clauses likes(tom,talk). /*1*/ likes(bill,swim). /*2*/ likes(bill,talk). /*3*/ friend(john,X):-likes(X,talk),likes(X,swim) /*4*/ 设Goal:friend(john,Who)
可以回溯 如果加入 cut p:- q1,q2,!,r1,r2. p:- s1,s2. 逻辑关系变为 P1 if (if q1∧ q2 then r1 ∧r2 else s1 ∧s2 ) then p q1 q2 ! r1 回溯
P P2 P r2 s1 s2
截断 回溯
影响回溯的手段之二——cut 影响回溯的手段之二
影响回溯的手段之二——cut (截 影响回溯的手段之二
断)
cut—无条件成功,并截断回溯
(也可以用! 表示)
影响回溯的手段之二——cut 影响回溯的手段之二
例:p:- q1,q2,r1,r2. p:- s1,s2. 逻辑关系是 if q1∧ q2∧r1 ∧r2 or s1 ∧s2 P P1 then p q1 q2 r1 r2 s1 s2 P2 P
影响回溯的手段之二——cut 影响回溯的手段之二
应改为 legal(X):- super_speed(X),!,fail. legal(X):- drunk_drive(X),!,fail. legal(X).
常识:“外Goal” 和“程序内goal” 有“勤” “懒” 之分
显然,此结果不完备
Press the SPACE bar
影响回溯的手段之一——fail 影响回溯的手段之一
fail—无条件失败,引起回溯
Prolog入门教程12009
Prolog入门教程12009-11-14 01:29 P.M.如果你是一位prolog的新手,希望你首先阅读这篇文章,好对prolog的全局有个了解。
在这篇文章中我会把prolog和其他的程序语言做比较,所以希望你已经具有了一定的编程水平。
什么是prolog?prolog是Programming in LOGic的缩写,意思就是使用逻辑的语言编写程序。
prolog不是很高深的语言,相反,比较起其他的一些程序语言,例如c、basic等等语言,prolog 是更加容易理解的语言。
如果你从来没有接触过计算机编程,那么恭喜你,你将很容易的进入prolog世界。
如果你已经是其他语言的高手,你就需要完全丢弃你原来的编程思路,否则是很难掌握prolog的。
一个例子逻辑思维在我们日常生活中比比皆是,prolog正是把这种思维用文字描述出来的计算机语言。
还是首先举个例子吧。
比如一群年轻人正在恋爱,每个人都有自己心中所追求的对象:张学友爱王菲张学友爱周慧敏王菲爱谢廷峰周慧敏爱张学友谢廷峰爱王菲谢廷峰爱周慧敏刘德华爱周慧敏......我们说两个年轻人要互相都喜爱,他们就算是一对情侣,那么上面的谁和谁是情侣呢?这应该算是一道最简单逻辑推理题目了,那么我们如何用prolog语言实现呢?“张学友爱王菲”是一条已知的事实,用prolog语言来表达就是:爱(张学友,王菲). 注意1:这里是为了阅读方便才使用汉字的,真正的prolog是不允许使用除了基本字符以外字符的,也就是说,上面的句子必须写成love(zhangxueyou,wanfei).,电脑才能够真正的理解。
注意2:最末尾的“.”一定不能掉,它表示一个句子结束。
注意3:上面词汇对于电脑来说并没有真正的含义,所以我们完全可以用ai(zxy,wf).来表达这个关系,更进一步,我们甚至可以用xxx(a,b).来表达,只要你自己心里清楚xxx表示爱,a表示张学友,b表示王菲就可以了。
PROLOG语言入门
PROLOG语言入门简介PROLOG语言是一个非常有趣的计算机语言。
它完全不同于我们已经很熟悉的其它计算机语言、例如BASIC、FORTRAN、C等。
主要由于现在的计算机硬件能力的限制,使得PROLOG语言没有得到更广泛的流行。
但是未来随着计算机硬件技术的发展,PROLOG语言将会发挥更大的作用。
尤其是通过PROLOG语言的学习,我们对计算机语言的本质会有更多的了解。
虽然对许多人来说,PROLOG语言比较陌生。
但是PROLOG语言很容易入门,人们很容易感受到它的魅力。
本书在多年从事相关教学的讲义的基础上形成。
本书没有试图写成PROLOG语言程序设计的指导书,而是着重在于于介绍PROLOG的有趣性,引导读者尽快进入PROLOG世界。
同时,尽量利用BASIC、FORTRAN、C等大家熟悉的语言的例子,说明PROLOG与这些语言的区别,以加深读者对PROLOG的理解。
因此,本书适合于PROLOG的初学者,而对于那些已有相当基础、希望利用PROLOG开发应用程序的读者,则可以选择其它更加全面的书籍,例如本书末尾所推荐的那些书籍。
目录1引言2为什么有PROLOG3什么是PROLOG ?4最简单的PROLOG程序5PROKOG运行方式6关于Visual PROLOG ?7Visual PROLOG的运行方式8PROKOG入门9规则与事实10递归11表12引言首先,介绍一种常见的扑克牌游戏。
该游戏方法为:“随意抽出4张扑克牌。
然后利用加、减、乘、除方法,对这个4张扑克牌所代表的4个数进行四则运算。
要求最后的运算结果为24。
注意,每个数只能在运算中出现1次,且必须出现1次。
”例如,如果所抽取的4张牌所代表的4个数分别为:2,4,7,9。
则可以采用如下运算方法:2 * 4 + 9 + 7 = 24有时,同一数字组合,可能存在好几种四则运算方法。
游戏时,可以规定先找到相应的四则运算方法的人获胜。
有些数字组合比较容易计算,例如6,6,6,6。
Prolog学习:基本概念
Prolog学习:基本概念对Prolog有了⼀个感性的认识,今天介绍下Prolog中⼀些基本概念,想要⽤Prolog解决⼀些实际问题之前必须要先了解它们。
这些概念在这本书中都有介绍,我简单提炼汇总下,就当给这门⼩众语⾔做个宣传吧。
变量/规则/知识库在Prolog中变量的命名是有特殊要求的,如果⼀个词以⼩写字母开头,它就是⼀个原⼦(atom),类似于其他语⾔中的符号(symbol),如果⼀个词以⼤写或下划线开头,那么它就是⼀个变量,和其他语⾔⼀样变量值可以改变,可以赋值(不过更灵活)。
符号组成⼀些事实:likes(zhangsan,lisi).likes(wangwu,lisi).likes(chenliu,maqi).符号和变量在⼀起可以⽤来定义规则:friend(X,Y):- \+(X = Y),likes(X,Z),likes(Y,Z).事实是我们对这个世界直接观察的结果。
规则是关于现实世界的逻辑推论。
事实 + 规则 = 知识库。
上⾯的规则可以叫做friend/2因为它有两个参数(类似C#⽅法中的形参),:-读作“如果”,“如果”后⾯是由⼀系列“⼦⽬标”组成,⼦⽬标之间可以是且的关系,⽤“,”分割,也可以是或者的关系,⽤“.”表⽰。
Prolog就是通过验证规则来回到我们yes或no的,如果参数能满⾜所有⼦⽬标就是yes。
合⼀(unification)合⼀是Prolog中⼀个⾮常重要的概念。
简单的来说合⼀就相当于其它语⾔中的赋值:cat(lion).cat(tiger).dorothy(X,Y,Z) :- X = lion,Y = tiger,Z = bear.twin_cast(X,Y) :- cat(X),cat(Y).合⼀的意思是:找出那些使规则匹配的值。
所以执⾏dorothy(lion,tiger,bear).这句,Prolog会返回yes:dorothy/3规则的右侧,Prolog将lion赋值给X,tiger赋值给Y,bear赋值给Z,就像在命令式语⾔中这样:var X = lion;var Y = tiger;var Z = bear;这些值和左侧(也就是dorothy(lion,tiger,bear))对应的值相匹配,所以合⼀成功。
Prolog基础
Prolog的一些内建谓词
Prolog提供了一些有用的内建谓词(Builtin Predicates).内建谓词和用户定义谓词 使用方式是类似的,最重要的区别在于: 内建谓词不能出现在事实的主函数符或规 则的规则头部的位置上(因为出现在这个 位置上实际上意味着修改内建谓词的定义)
Prolog的一些内建谓词(续)
Prolog-算术表达式-is操作符
is操作符有两个参数,第二个参数必须是 一个合法的算术表达式,其中所有的变量 都必须是实例化的,第一个参数或者是一 个数字或者是表示数字的变量。
Prolog-运算符-优先级
运算符(Operators)具有优先级 (Precedence)和结合性(Associativity)两 个属性.这两个属性决定一个表达式应该 如何解释。 在Prolog中每个运算符都关联有一个整数 值(SWI-Prolog中取值范围是0~1200)表 示它的优先级。整数值越低优先级越高。
Prolog-目标的执行(续)
如果目标同某条规则的规则头部相匹配,那 么相应的变量实例化被应用在规则体中,规 则体变成了新的需要满足的目标。 规则的头部被认为是可以证明为真(provably true), true),如果它的规则体的所有谓词的合取 (conjunction,逻辑与)是可以证明为真的。 如果目标同程序中的一个事实相匹配,那么 目标的证明就完成了,匹配过程中所做的变 量实例化被返回给用户。 程序中事实和规则的出现顺序是很重要的, Prolog总是试着将当前目标与找到的第一个 可能的事实或规则头部相匹配。
is_bigger(horse,X), f(g(X, _), 7), ‘My Functor’(dog)
在函数符和参数列表的左括号之间不能有任何空 格符 组合项和原子构成了Prolog的谓词(Predicate)
人工智能PROLOG语言简介讲解
信息技术与工程学院课程名称人工智能论文题目人工智能PROLOG语言简介专业班级13级计本二班作者******指导教师何淑贤2016 年6月16 日人工智能PROLOG语言简介因特网上丰富的人工智能教育资源为我国高中人工智能教育的开展提供了一个强有力的学习支持。
虽然大多以国外网站居多,但教师若能结合本校实际情况和学生的特点对其合理利用,使之本土化、校本化,无疑能够有效地促进人工智能教育的顺利开展。
人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。
能够用它来编写程序求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。
典型的人工智能语言主要有LISP、Prolog、Smalltalk、C++等。
一般来说,人工智能语言应具备如下特点:•具有符号处理能力(即非数值处理能力);•适合于结构化程序设计,编程容易;•具有递归功能和回溯功能;•具有人机交互能力;•适合于推理;•既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。
其中,Prolog语言是人工智能与专家系统领域最著名的逻辑程序设计语言。
Visual Prolog指可视化逻辑程序设计语言,是基于Prolog语言的可视化集成开发环境,是Prolog开发中心(PDC)最新推出的基于Windows环境的智能化编程工具,其语言特性符合相应的国际标准ISO/IEC 13211-1:1995。
Visual Prolog是当今新一代开发智能化应用的强有力工具,它还支持基于网络的开发、数据库、多媒体、与C语言集成等。
Visual Prolog在美国、加拿大、西欧、澳大利亚、新西兰、日本、韩国、新加坡等发达国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。
目前,中国在智能化领域的教学、研究、开发及应用正在迎来一个蓬勃发展的新时期,拥有较多的群体,对这种工具软件的需求已经逐渐显现出来。
人工智能语言—Prolog
其次,调用过程AT(Zhang, x),从而产生新目标 T(Zhang, train),与事实匹配,产生目标 ⊓ 。因而调用成功,输出“True”。
高级人工智能
5
人工智能语言—Prolog语言
高级人工智能
10
人工智能语言—Prolog语言
Prolog的构成
目标(问题):关于对象性质或关系的询问。 ?— student(john) ?— married(mary,x)
高级人工智能
11
人工智能语言—Prolog语言
Prolog语言的基本文法
Prolog语言的最基本语言成分是项(term)
定理证明、智能问题求解、计算机辅助设计、规 划生成等领域。
高级人工智能
8
人工智能语言—Prolog语言
Prolog的构成
事实:事实用来说明一个问题中已知的对象和它们之间 的关系。在Prolog程序中,事实由谓词名及用括号括起 来的一个或几个对象组成。谓词和对象可由用户自己定 义
student(john) married(tom, mary) likes(bill,book)
Prolog语言及其基本结构
Prolog是当代最有影响的人工智能语言之一, 由于该语言很适合表达人的思维和推理规则, 在自然语言理解、机器定理证明、专家系统 等方面得到了广泛的应用,已经成为人工智 能应用领域的强有力的开发语言。
高级人工智能
6
人工智能语言—Prolog语言
现在的Prolog语言有许多版本
项或者是常量,或者是变量,或者是一个结构。
实验1 Visual Prolog入门(1)
Visual Prolog语言简介Prolog语言是人工智能与专家系统领域最著名的逻辑程序设计语言。
Visual Prolog 意指可视化逻辑程序设计语言,是基于Prolog语言的可视化集成开发环境,是Prolog开发中心(PDC)最新推出的基于Windows环境的智能化编程工具,其语言特性符合相应的国际标准ISO/IEC 13211-1:1995。
目前,Visual Prolog在美国、西欧、日本、加拿大、澳大利亚等发达国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。
预计短时期内,在国际上已经十分流行的最新版本的可视化逻辑程序设计语言Visual Prolog将会在我国广泛流行开来,并将迅速成为我国研究和开发智能化应用的最重要的工具。
Visual Prolog具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等强大功能。
它包含构建大型应用程序所需要的一切特性:图形开发环境、编译器、连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。
Visual Prolog包含一个大型库,捆绑了范围广阔的API函数:包括Windows GUI函数族、ODBC/OCI数据库函数族和Internet函数族(socket、ftp、http、cgi等)。
这个开发环境全部使用Visual Prolog语言写成,而且包含对话框、菜单、工具栏等若干编码专家和图形编辑器。
Visual Prolog支持Windows 3.x/95/98/Me/NT/2000/XP、OS/2和文本方式下的DOS、Linux和SCO UNIX。
Visual Prolog非常适合于专家系统、规划和其它AI相关问题的求解,是智能程序设计语言中具有代表性且应用较多的一种语言。
由于这种语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用。
逻辑型程序设计语言PROLOG详细教程
逻辑型程序设计语言PROLOG教程2.3. 1逻辑型程序设计语言PROLOGPROLOG的语句PROLOG语言只有三种语句,分别称为事实、规则和问题。
1.事实(fact)格式: <谓词名>(<项表>).功能一般表示对象的性质或关系。
其中谓词名是以小写英文字母打头的字母、数字、下划线等组成的字符串,项表是以逗号隔开的项序列。
例如:student(john).like( mary ,music).表示“约翰是学生”和“玛丽喜欢音乐”。
2. 规则(rule)格式:<谓词名>(<项表>):-<谓词名>(<项表>){,<谓词名>(<项表>)}.功能: 一般表示对象间的因果关系、蕴含关系或对应关系。
其中“:-”号表示“if”(也可以直接写为if),其左部的谓词是规则的结论(亦称为头),右部的谓词是规则的前提(亦称为体),{}表示零次或多次重复,逗号表示and(逻辑与),即规则的形式是一个逻辑蕴含式。
例如:bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).第一条规则表示“如果X是动物,并且X有羽毛,则X是鸟”;第二条规则就表示“X 是Y的祖父,如果存在Z,X是Z的父亲并且Z又是Y的父亲”。
3.问题(question)格式: ?-<谓词名>(<项表>){,<谓词名>(<项表>)}.功能表示用户的询问,它就是程序运行的目标。
例如:?-student(john).?-like(mary,X).2.3. 2 PROLOG程序PROLOG程序一般由一组事实、规则和问题组成。
问题是程序执行的起点,称为程序的目标。
例如下面就是一个PROLOG程序。
likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane ,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).?-friend(john,Y).可以看出,这个程序中有四条事实、两条规则和一个问题。
Prolog语言基础知识
Prolog语言基础知识一.数据结构PROLOG语言与其他任何一种计算机高级语言一样,有其定义的数据结构。
下面将介绍PROLOG语言的基本数据结构。
1.常量常量是数据结构的基本组成部分,用来对特定对象及关系的命名。
在PROLOG语言中,合法的常量有:(1)整数,一个纯数字串,例 182 000,581 202。
(2)原子,分为两种:1)标识符:以小写字母开头的,包含字母、数字、下划线的串,例aBC12,is_。
2)符号:PROLOG语言规定的符号集的非空序列,例?、-、=。
若原子用单引号厂(‘ ’)括住,则可含有任何字符。
(3)字符集ab...z2.变量变量是用来表示还无法知道且需要PROLOG程序来确定的客体。
变量用变量名表示,变量名与标识符相似,所不同的是以大写字母或下划线开头。
例Variable,_ansure。
PROLOG语言中有一个特殊的变量,不需要知道它是什么以及具体名字,只是表示留出一位置,称为匿名变量。
用单一的下划线(_)来表示。
比如只想知道是否有人喜欢跳舞,但不需知道这个人的名字,这时就可以用匿名变量。
3.结构结构是PROLOG语言中的第三类数据结构;用于构造PROLOG数据对象。
一个结构是一个单一的客体,它由一个函子和一个或多个称为分量的项的序列组成。
其书写形式为函子(分量1,分量2,…,分量n)其中的分量也可以是结构。
例如可用结构描述事实"Mary住zhongshan路120号":person(mary,address(zhongshan,120)).此例中address是一个具有两个分量即路名和门牌号的结构。
该结构是作为事实的一个分量出现,它将作为关系中的一个客体来对待。
当然,结构中的分量也可以是结构,如上例可写成:person(name(mary),address(street(zhongshan),number(120))).其中name,address,street,number均为结构。
Python人工智能中逻辑编程语言Prolog基础
逻辑编程语言Prolog基础## 什么是Prolog?我们先给出一个例子.man(jack)man(dylan)happy(jack)playGuitar(jack) :- happy(jack)运行:?- man(jack)Prolog回答:yes再运行:?- playGuitar(jack)Prolog回答同样是:yes上面的例子展示的就是Prolog程序和它的运行以及运行结果.Prolog是一种基于模式匹配,树型结构和自动回溯等机制的面向目标的编程语言。
这几个机制构成了灵活而强大的编程框架. Prolog尤其适用于包含结构化对象以及这些对象之间的关系的问题. 例如,prolog可以依据空间关系和一般规则进行推理. 所以,对于人工智能和非数值编程,prolog是一种强大的语言。
字面上看,Prolog意思是以逻辑(logic)编程. 此观念来自于20世纪70年代初期。
早期开发者有Robert Kowalski, Maarten Van Emden 和Alain Colmeraner.在低级编程语言中,程序员往往指定计算机如何做一件事(How型语言). 在高级编程语言中,程序员给计算机指定需要做什么. 编程语言是从低级向高级演化的. Fortran, C, Lisp,Python,Java等几乎所有语言都属于How型语言. 相反地,Prolog舍弃了“指定计算机如何做事”这样的传统. 它鼓励程序员描述问题,而不是描述解决问题的详尽的方式. Prolog 为我们提供了另外一种编程的方式. 它背后的科学是人工智能. 我们可以从中学习到一些解决问题的观念,比如问题化简,回溯链,各种搜索技术等. Prolog可以让我们将抽象概念具体化. 编程者只需要指定什么是已知的,什么问题需要解决,即编程人员更关注事实而不是算法.## Prolog语法Prolog程序由语句(clauses)构成。
语句又由对象和关系构成. 例如,上例中的 man(jack)man就是一种关系,它可以指明对象的性别; jack就是该关系中的对象.运行Prolog程序的方式很简单: 向程序提问. 语法如下:?-关系表达式.其中,?- 是提示符.后面有个结束符(.).例如:?- happy(jack).写语句时,常需要用到符号”:-”.:- 表示”如果”,或“蕴含于”.例如:playGuitar(jack) :- happy(jack)上面代码的意思是:如果jack高兴,那么jack就要弹吉他.:- 的右边叫主体;:- 的左边叫规则头.下面我们通过一个例子来看Prolog的机制,从中可见多个重要的概念. 例如, 甲(a)是乙(b)的父母,可写为:parent(a,b)parent是关系名称; a,b 是该关系的参量.## Prolog举例下面我们以中国近代著名的家庭义宁陈宝箴家的家谱为例,来看看Prolog的运行机制. 家谱如下:graph TB陈宝箴 --> 陈三立黄淑贞 --> 陈三立黄淑贞--> 陈三畏陈三立 --> 陈师曾陈三立 --> 陈寅恪陈师曾 --> 陈封怀```在以下代码中,我们将人名用其拼音首字母的小写代替. 人名和拼音首字母的对应如下:陈宝箴 cbz黄淑贞 hsz陈三立 csl陈三畏 csw陈师曾 csz陈寅恪 cyk陈封怀 cfh整个家谱由下列prolog程序给出:parent(cbz,csl).parent(hsz,csl).parent(hsz,csw).parent(csl,cyk).parent(csl,csz).parent(csz,cfh).此程序包含6个语句. 每个语句声明了一个parent关系. 当此程序与prolog系统交互时,prolog就parent这一关系提问. 例如,陈三立是陈寅恪的父亲吗?实现代码如下: ?- parent(csl,cyk).当prolog发现这是一个已经声明的事实,因此prolog会给出答案:yes我们也可问程序:“陈三畏是陈师曾的父母吗?”?-parent(csw,csz)prolog回答:no因为程序并未提及陈三畏是否为陈师曾父母.当然我们也可问:“黄淑贞是Alice的父母吗?”?-parent(hsz,alice)Prolog不会判断alice是中国人名还是外国人名. prolog仅仅从程序中的关系来做判断. 因为并未听过”ALice”这个人,因此它果断给出结果:no但是,如果我们问“谁是陈三畏的父母?”这样的问题时,prolog确实可以给出我们一个值,而不仅仅是yes或no.?- parent(X,csw).Prolog给出的回答是X=hsz同理,我们可以问:”谁是陈三立的子女?“?- parent(csl,X)输出结果为:X=csz这里,我们只得到一个回答. 可是,从家谱中给我们可以发现看到陈三立的子女不止一个,所以我们期待能看到所有的结果的操作. 这时,我们输入一个分号,那么Prolog就会给出其余的答案:X=cyk由于上图中没有给出陈三立更多子女的信息,所以,如果我们试图知道更多答案,Prolog 会回答“no”.考虑一个更复杂的情形. 我们可以问诸如”谁是谁的父母?”这样的问题. 提炼一下该问题,它就变为:找出X,Y,使得X是Y的父母. 用Prolog表示为:?- parent(X,Y).Prolog会找出所有的”父母-子女“对.Prolog一次只显示一个解,直到所有的解被找出. 结果如下:X=cbzY=csl;X=hszY=csl;X=hszY=csw;X=cslY=csz;...我们还可以问更加复杂的问题. 比如,”谁是陈封怀的祖父母?“这个关系我们命名为grandparent. 显然,我们的程序中没有grandparent这一关系. 虽如此,我们可以将这一问题的解决划分为两步.让每一名学员高薪就业第一步,谁是陈封怀的父母?设为Y.第二步,谁是Y的父母?设为X.Prolog将这一复合问题写出两个简单语句序列:?- parent(Y,cfh), parent(X,Y).答案为:X= cslY= csz复合语句可以理解为:找出X,Y,使得这两个条件成立:parent(Y,cfh) 和parent(X,Y). 这两个条件的顺序并不重要, 所以这个复合问题也可以写成?- parent(X,Y), parent(X,cfh).而结果不会改变.我们再举最后一例. 陈寅恪和陈师曾有共同的父母吗?同样,我们可以由两步得出:第一步,谁是陈寅恪的父母,设为X.第二步,X是陈师曾的父母吗?代码如下:?- parent(X,cyk), parent(X,csz).结果如下:让每一名学员高薪就业 X=csl从上面的例子中,我们看出了Prolog程序的一些特征。
prolog中文手册
prolog中文手册
Prolog是一种逻辑编程语言,它使用一阶谓词逻辑作为理论基础。
以下是一些关于Prolog中文手册的信息:
1. 《Prolog编程》:这是一本介绍Prolog编程的中文书籍,作者是瑞士计算机科学家、逻辑学家和哲学家汉斯·卢卡斯(Hans Lukas)。
该书详细介绍了Prolog的基本概念、语法和应用,并提供了许多实例和练习题。
2. 《Prolog语言及其应用》:这是一本介绍Prolog语言及其应用的中文书籍,作者是中国计算机科学家陈火旺。
该书详细介绍了Prolog的基本概念、语法和应用,并提供了许多实例和练习题。
3. 《Prolog程序设计》:这是一本介绍Prolog程序设计的中文书籍,作者是中国计算机科学家李晓东。
该书详细介绍了Prolog 的基本概念、语法和应用,并提供了许多实例和练习题。
prolog教程第10章
2004.11.3
AI程序设计
5
第三部分:第10章 第三部分:第10章 Visual Prolog语言元素 Prolog语言元素
10.2 对象系统
Visual Prolog的对象系统(object system), 包括外部视图(External View)和内部视图 (Internal View)。
interface interfaceAndClassName ... end interface interfaceAndClassName class interfaceAndClassName : interfaceAndClassName ... end class interfaceAndClassName
domains t1 = [1..17]. t2 = [5..13]. t3 = t1 [5..13].
2004.11.3
t1是一个整型变量,取值从1到17(包括端点在内)。 同样,t2取值从5到13,但是t2不是t1的子类型。另 外,t3 (包含与t2一样的取值)则是t1的子类型,因 为这是声明了的。
2004.11.3
AI程序设计
16
第三部分:第10章 第三部分:第10章 Visual Prolog语言元素 Prolog语言元素
10.3.1 名字分类
如果一个作用域声明一个无返回值的变量名字,那么可以声明如下: 一个谓词,或者 一个事实 最后,关于重载。下列实体能够重载: 算符 函数 谓词 一个算符在同一论域内不可以使用两次(即使变元不同)。
本章介绍Visual Prolog 6程序设计语言的语法和语义。Visual Prolog是基于逻辑程序设计语言Prolog的一种强类型的面向对象的程序 设计语言。一个Visual Prolog程序包括一个目标、大量的接口声明和类 的实现程序。 接口、类声明和类实现包括Prolog实体的定义和声明,即 • 论域 • 常量 • 谓词 • 事实数据库 Visual Prolog程序的实际代码中的谓词定义由谓词声明和子句定义 来声明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
?- uncle(a, U).
问题: a 是谁的叔叔 ? ( U = ? )
2013-7-11
Prolog的求解过程:
第一步:问题 uncle(a,U) 与事实逐个匹配,
不成功
father(a, b). father(c, d).
brother(a, c).
2013-7-11
uncle(a,U) uncle(X, Y) :- brother(X, Z) , father(Z, Y). 第二步:与规则头(左部)匹配,即寻找合一者, 有 {a/X, U/Y} 转化为两个子问题:brother(a, Z)和father(Z, U)
配,使另一个变量实例化,且约束值相同
2013-7-11
5 常用的内部谓词
内部谓词:Prolog系统本身定义的一些基本谓词
注意:可以直接使用,用户不能修改
2013-7-11
①算术运算
算术表达式由操作数(数、变量)、操作符和括
号组成
算术运算符号:“+、-、* 、/”(加减乘除)
2013-7-11
优先级:与通常的数学运算一致 形式:中缀:X+Y*Z
当 X 在输入前已经实例化,则读入项将与 X
匹配,根据匹配的成功与否,决定其真假值
2013-7-11
④谓词cut与fail(特殊谓词):
cut ( ! ):禁止回溯
fail: 强迫回溯
2013-7-11
关于cut的几点说明: 第一、只允许作为一个子目标出现在程序中 第二、第一次遇到它时,总是立刻被满足,但是 不能被重新满足 第三、用户可以使用它来控制回溯方式,切断一 些不必要的回溯,提高程序运行效率
名的对象,用大写字母开头
2013-7-11
特殊变量:空变量,记作:“_”
含义:我们对问题的某一个变量的值不关心
2013-7-11
<项>::= <常量> | <变量> | <复合项>
<复合项> ::= <原子>(<项> { , <项> })| <项> <原子> <项> { <原子> <项> }
2013-7-11
①若与另一个未实例化的变量匹配,则视为同一变
量,两者共享
②若与另一个实例化的变量匹配,也变成了实例化 的变量,且两者同值
③若与常量匹配,也变成了实例化变量,并取常量
的值
2013-7-11
第三、常量只能与相同的常量匹配
第四、实例化的变量与另一个实例化的值相同的 变量匹配,也可以与另一个未实例化的变量匹
2013-7-11
参考资料:
1 雷英杰,张雷,邢清华,孙金萍。Visual Prolog 语言教程。西安:陕西科学技术出版社,2002
年2月(380页,35元)
2 雷英杰,邢清华,孙金萍,张雷。Visual Prolog 编程、环境及接口。北京:国防工业出版社, 2004年1月(412页,36元)
人
工
智
能
Artificial Intelligence (AI)
2013-7-11
Prolog 语言简介
Prolog语言是一种以一阶谓词为基础的逻辑性语
言(Programming in Logic)
2013-7-11
Prolog语言的特点
Prolog语言的基本内容
简单的例子
2013-7-11
Prolog语言的特点
前缀:+(X,*(Y,Z))
2013-7-11
②比较谓词
eq(X, Y) ne(X, Y) gt(X, Y) X=Y X<>Y X>Y
ls(X, Y)
2013-7-11
X<Y
对于 “= 、<> ”,
X,Y 可以取
常量 变量 谓词 表
2013-7-11
对于“=”(赋值与比较)的几点说明: 第一、当一个变量已经实例化,则可以与任意 未实例化的变量相等,且将其实例化(赋值
<项> <原子> <项> { <原子> <项> }
2 Prolog中的语句
Prolog中的语句分成三种形式: ①事实: P. 含义:无条件成立,恒为真 例:like( monkey, banana)
2013-7-11
②规则: P :- P1 , P2 , … , Pn .
“ :- ”
“ ,”
功能)
第二、两者均未实例化,eq(X, Y) 恒为真,并 视为同一变量
2013-7-11
第三、均以实例化,由当前值来决定
第四、如果为表,要求对应的元素相等,才为真 第五、如果是谓词,谓词同名,变元个数相等,
对应的变元相等
2013-7-11
③输入输出谓词
第一、write(X):向输出设备输出实例化结果 第二、read(X): 当 X 未实例化时,输入一个项
项的定义:
<项>::= <常量> | <变量> | <复合项>
2013-7-11
<项>::= <常量> | <变量> | <复合项>
<常量>::=<原子> | <数> <原子> ::= <标识符原子> | <字符串原子> | <特殊原子>
2013-7-11
标识符原子
命名:用小写字母或者小写字母开头的小写字母 数字串
么”,不要告诉系统 “如何做” ② 数据与程序的统一表达。提供一种统一的符
号结构 “项” ,数据与程序都是由项组成
2013-7-11
③ 自动实现模式匹配与回溯。这是人工智能中最常 用的两项操作,Prolog自动实现这些操作
④ 程序易于编写与阅读。它是面向人的自然语言
⑤ 语句句型少,语法简明。只有三种句型
2013-7-11
说明:
实际运行中,要逐个试探(搜索),失败 则要回溯,成功也要回溯(求出所有解)
2013-7-11
例:
father(a, b).
father(c, d).
a是b的父亲
brother(a, c). a与c是兄弟关系
uncle(X, Y) :- brother(X, Z), father(Z, Y).
P1∧P2∧…∧PnP
可以转化为 ~P1∨~P2∨…∨~Pn∨P 也是Horn子句,并受全称量词约束
2013-7-11
③(问题)是
Q1∧…∧Qm
受存在量词约束,取非后 ~Q1∨…∨~Qm 受全称量词约束,是Horn子句
2013-7-11ห้องสมุดไป่ตู้
Prolog三种形式的语言都是Horn子句
问题求解就是Horn子句集消解
Prolog语言(或者系统)是以一阶谓词逻辑的 Horn 子句集为语法,以Robinson的消解原理 为工具,加上深度优先的控制策略而形成的人
工智能通用程序设计语言
2013-7-11
Prolog系统
Horn 消 解 原 理 深 度 优 先
子 句 集
2013-7-11
Prolog具有下列特点:
① 是一种描述性语言。只需要告诉 “系统做什
goal
likes(m, X), likes(j, X). (问题) 问题:是否 m 和 j 都喜欢什么东西?( X = ? )
2013-7-11
likes(m, f).
likes(m, w).
likes(j, w).
Prolog的求解过程
likes(j, s).
现在有两个问题:likes(m, X) 和 likes(j, X)) 第一步:第一个问题 likes(m, X) 去与事实匹配
用途:用于标识对象的名字、谓词(对象间的关
系)或函数名 例:john, marry, classmate, teacher
2013-7-11
字符串原子是用引号括起来的符号串
特殊原子指一些特殊符号,如 +、-、*、 / 等
2013-7-11
<项>::= <常量> | <变量> | <复合项>
变量:用于表示暂时不能命名或者不需要命
2013-7-11
关于 fail 的说明:
作为一个子目标,使Prolog程序运行到 fail,
必定引起回溯
2013-7-11
例:求 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 去掉“ !”,会发生什么?
2013-7-11
Prolog语言的基本内容
1 项 2 Prolog中的语句 3 表结构 4 Prolog程序的结构
5 常用内部谓词
6 Prolog程序设计步骤
2013-7-11
1 项
符号说明:
“ ::= ” “|” “{}”
2013-7-11
表示“ 定义为 ” 表示 “ 或 ”,可选 表示 “ 重复或者出现多个 ”
2013-7-11
6 Prolog程序设计步骤
对应于Prolog程序的组成部分,设计步骤分为:
第一、说明事实:说明与待求解的问题有关的事
实。例如,人物事及相互关系,对应于叙述
性知识
2013-7-11
第二、定义规则:定义个体及其相互关系的推理 规则,反映与待求解问题有关的过程性知识