Prolog语言(耐心看完-你就入门了)剖析
Prolog语言(耐心看完-你就入门了)剖析
名的对象,用大写字母开头
2024/7/16
特殊变量:空变量,记作:“_” 含义:我们对问题的某一个变量的值不关心
2024/7/16
<项>::= <常量> | <变量> | <复合项>
<复合项> ::=
<原子>(<项> { , <项> })|
<项> <原子> <项> { <原子> <项> }
也是Horn子句,并受全称量词约束
2024/7/16
③(问题)是 Q1∧…∧Qm
受存在量词约束,取非后 ~Q1∨…∨~Qm
受全称量词约束,是Horn子句
2024/7/16
Prolog三种形式的语言都是Horn子句 问题求解就是Horn子句集消解
2024/7/16
3 表结构
表:若干个元素的有序序列
2024/7/16
项的定义: <项>::= <常量> | <变量> | <复合项>
2024/7/16
<项>::= <常量> | <变量> | <复合项>
<常量>::=<原子> | <数> <原子> ::=
<标识符原子> | <字符串原子> | <特殊原子>
2024/7/16
标识符原子 命名:用小写字母或者小写字母开头的小写字母
不能被重新满不必要的回溯,提高程序运行效率
2024/7/16
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语言入门
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))对应的值相匹配,所以合⼀成功。
7 智能控制语言prolog
7.1 什么是Prolog语言
❖ Prolog程序的特点
Prolog程序没有特定的运行顺序,其运行顺序 是由电脑决定的,而不是编程序的人
7.2 Prolog入门---事实
❖ 事实 的语法结构--(原子)
原子通常是字母和数字组成,开头的字符必须是小写字母。 例如:
hello twoWordsTogether x14 为了方便阅读,可以使用下划线把单词分开。例如
a_long_atom_name z_23
下面的是不合法的原子: 123nodigitsatbeginning Nocapsfirst 下划线不能放在最前面
程中出现的程序。
和其他的语言一样,最好的学习方法是实践。本课程 将使用swi Prolog的解释器来向大家介绍几个具语言
❖ 角色扮演游戏-小女孩找毛毯
假设你所扮演的角色是一个三岁的小女孩,你想睡觉了,可是没 有毛毯(nani)你就不能安心的睡觉。所以你必须在那个大房子 中找到你的毛毯,这就是你的任务
7.2 Prolog入门---事实
❖ 角色扮演游戏-小女孩找毛毯
定义手电筒(由于是晚上,玩家必须找到手电筒,并打开 它才能到那些关了灯的房间)的状态和玩家的初始位置。
turned_off(flashlight). here(kitchen).
7 智能控制语言 Prolog
7.1 什么是Prolog语言 7.2 Prolog入门---事实 7.3 Prolog入门---查询 7.4 Prolog入门---规则 7.5 Prolog入门---算术 7.6 Prolog入门---内部谓词 7.7 Prolog入门---递归和表 7.8 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语言有许多版本
项或者是常量,或者是变量,或者是一个结构。
逻辑型程序设计语言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均为结构。
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程序的实际代码中的谓词定义由谓词声明和子句定义 来声明。
《用prolog解决汉诺塔问题》
用prolog解决汉诺塔问题因为没有接触过这种人工智能语言,所以有点战战兢兢,在这里就和大家来分享一下对prolog的理解:要想使用prolog,首先要了解prolog。
1、prolog语句(1)、谓词逻辑谓词,是只用来描述对象的状态、性质及对象之间的关系的词。
逻辑,是指事物的因果关系。
谓词逻辑:就是指利用谓词的行驶,来表达只和和进行因果推理例如:喜欢(小芳,羽毛球)即表示:小芳喜欢羽毛球。
(2)、事实、规则和目标(1)事实事实是prolog中最简单的谓词,一般表示对象的状态、性质或对象之间的关系。
其格式为:谓词(参数1,参数2……)例如:小芳喜欢羽毛球在prolog中可以这样表示:likes(xiaofang,badminton)。
(2)规则当一条事实需要依赖于另一条事实时,需要用规则来表示。
规则可以表示对象之间的因果关系、蕴涵关系或对应关系。
其格式:谓词名1(参数):-谓词名2(参数),谓词名3(参数)……符号“:-”表示如果,右面的谓词是规则的前提,左面的谓词是规则的结论。
例如:凡是喜欢乒乓球的都是小华的朋友。
在prolog中表示为:friend(X,xiaohua):-likes(X,pingpong).(3)目标用户的询问是程序运行的目标。
它可以是一个简单的谓词,也可以是多个谓词的组合。
目标通常直接在程序中写出(成为内部目标),也可以在程序运行时临时给出(成为外部目标)。
“?-”谓词名(参数)……“? –”表示提问例如:谁是小华的朋友?在Prolog中表示为:?-friend(X ,xiaohua)2、prolog的运行机理:prolog求解问题的过程是:从目标出发,不断地进行例化(当某一变量被赋值后就成为约束变量,也可以成为例化)、匹配(当两个谓词的名称相同,参数的个数、类型相同,并且还满足某些条件时,则这两个谓词可以相互匹配),有时还要进行回溯,知道目标被完全满足或不能满足时为止。
第6章 PROLOG语言
到目前为止,PROLOG语言是两种主要的人工智能程序设 计语言之一(另一个是LISP)。本章对PROLOG语言做 一描述,并讨论几个例子,使大家了解PROLOG语言及 其特点,并能编写简单的PROLOG程序。
2020/7/27
2
第6章 PROLOG语言
6.1.1 PROLOG语言的发展 PROLOG(Programming in Logic)语言是一种以逻辑
注意1:prolog是不允许使用除了基本字符以外字符的, 上面的句子必须写成love(zhangxueyou,wanfei).,电脑 才能够真正的理解。
注意2:最末尾的“.”一定不能掉,它表示一个句子结束。
注意3:上面词汇对于电脑来说并没有真正的含义,所以 我们完全可以用 ai(zxy,wf).来表达这个关系 。
表的一般形式是[x1,x2,…,xn]表的分量可以是原子, 结构也可以是表。
其中xi(i=1,2,…,n)为PROLOG的项,一般要求同一个表 的元素必须属于同一领域。不含任何元素的表称为空 表,记为[ ]。
2020/7/27
18
第6章 PROLOG语言
例如下面就是一些合法的表。 [1,2,3] [apple,orange,banana,grape,cane] ["PROLOG","MAENS","PROGRAMMING","in logic"] [[a,b],[c,d],[e]] []
(3)表达式
PROLOG提供了五种最基本的算术运算:加、减、乘、除和取模,相 应运算符号为+、-、*、/、mod。这五种运算的顺序为:*、/、 mod优先于+、-。同级从左到右按顺序运算,括号优先。算术表达
prolog语言学习入门.
prolog语言学习入门看到今天的作业题,我就感觉很难按要求完成了,因为prolog对于我来说,完完全全是陌生的,倒是pascal、C等语言反倒略微懂得一点皮毛,照专家所说,这更增加了学习这门语言的难度。
即使不难,一天之内要用一门完全陌生的语言编写并调试运行三个程序,这对我来说,也是不可能完成的。
当然,视频中老师已经把程序代码展示出来了,但如果单纯抄录下来,也不能真正弄懂其中含义,收益不大。
所以,只好静来心来,从网上找到一些Prolog入门资料,感觉帮助还是挺大的,在这里总结下来,与大家一起分享。
一、prolog的特点1. prolog程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程序的人。
从这个意义上来说,prolog程序不是真正意义上的程序。
所谓程序就是按照一定的步骤运行的计算机指令,而prolog程序的运行步骤不由人来决定。
它更像一种描述型的语言,用特定的方法描述一个问题,然后由电脑自动找到这个问题的答案。
举个极端的例子,我们只需要把某个数学题目告诉它,它就会自动的找到答案,而不像使用其他的语言一样,必须人工的编制出某种算法。
2. prolog程序中没有if、when、case、for这样的控制流程语句前面已经说了,程序的运行方式有电脑自己决定,当然就用不到这些控制流程的语句了。
通常情况下,程序员不需要了解程序的运行过程,只需要注重程序的描述是否全面,不过prolog 也提供了一些控制流程的方法,这些方法和其他语言中的方法有很大的区别。
3. prolog程序和数据高度统一在prolog程序中,是很难分清楚哪些是程序,哪些是数据的。
事实上,prolog中的所有东西都有相同的形式,也就是说数据就是程序,程序就是数据。
举一个其他语言的例子:如果想用c语言编写一个计算某个数学表达式的程序很简单(比如:a=2+54,因为这是一段程序。
但是如果想编写一个计算用户输入的表达式的值的程序就很困难了。
基于Prolog的逻辑编程思想在实际项目中的应用
基于Prolog的逻辑编程思想在实际项目中的应用Prolog是一种基于逻辑编程思想的编程语言,它使用逻辑推理来解决问题。
在实际项目中,Prolog的逻辑编程思想可以被广泛应用,帮助开发人员更高效地解决复杂的问题。
本文将探讨Prolog在实际项目中的应用,并分析其优势和局限性。
什么是PrologProlog是一种基于逻辑编程思想的编程语言,它使用谓词逻辑来表示知识和推理规则。
Prolog程序由事实(Facts)和规则(Rules)组成,通过逻辑推理来回答查询。
Prolog的核心思想是“声明式编程”,即开发人员只需描述问题的本质,而不需要指定解决问题的具体步骤。
Prolog在实际项目中的应用1. 人工智能领域Prolog在人工智能领域有着广泛的应用。
由于其逻辑推理的特性,Prolog常被用于构建专家系统、自然语言处理系统和知识图谱等人工智能应用。
通过定义事实和规则,Prolog可以帮助系统进行推理和决策,从而实现智能化的功能。
2. 数据分析与知识图谱在数据分析领域,Prolog可以被用来构建知识图谱,帮助组织和推理大量结构化数据。
通过定义实体、关系和属性,Prolog可以实现复杂的数据查询和推理,为数据分析提供强大支持。
3. 自然语言处理Prolog也被广泛应用于自然语言处理领域。
通过定义语法规则和语义关系,Prolog可以帮助系统理解自然语言文本,并进行语义分析、问答系统等任务。
其逻辑推理能力使得Prolog在处理自然语言时具有独特优势。
4. 软件工程与规则引擎在软件工程领域,Prolog可以被用来构建规则引擎,帮助实现复杂业务规则和逻辑。
通过定义规则库和查询接口,Prolog可以实现灵活的规则匹配和推理过程,为软件系统提供高度可扩展性和灵活性。
Prolog的优势逻辑推理能力强:Prolog基于谓词逻辑,具有强大的逻辑推理能力,能够处理复杂的知识表示和推理问题。
声明式编程:开发人员只需描述问题的本质,而不需要指定解决问题的具体步骤,简化了程序设计过程。
走近Prolog语言
走近Prolog语言 语言 走近
Prolog语言? 语言? 语言 C语言? 语言? 语言 面向对象程序设计语言(C#,JAVA)? 面向对象程序设计语言( , )?
Turbo C Visual C++ C#
Turbo Prolog
PDC Prolog
Visual Prolog
目标的结构与事实 或规则相同,可以 是一个简单的谓词 ,也可以是多个谓 词的组合。目标分 内、外两种,内部 目标写在程序中, 外部目标在程序运 行时由用户手工键 入。
Company Logo
Prolog语很适合表达人的思维和推理规则,因此很适合于开发有关人工 很适合表达人的思维和推理规则, 很适合表达人的思维和推理规则 智能方面的程序,例如:专家系统、自然语言理解、 智能方面的程序,例如:专家系统、自然语言理解、定理证明以及许 多智力游戏。我搜了一下prolog相关的书籍,近几年的 相关的书籍, 多智力游戏。我搜了一下 相关的书籍 近几年的prolog相关 相关 的书籍出的比较少,主要是国外的相关研究, 的书籍出的比较少,主要是国外的相关研究,但是我在中国知网上以 prolog为关键字总共搜了 为关键字总共搜了1600多篇文章,所以它作为人工智能的主 多篇文章, 为关键字总共搜了 多篇文章 要开发语言是非常成功的。 要开发语言是非常成功的。 曾经有人预言prolog将成为下一代计算机的主要语言,虽然这个梦想 将成为下一代计算机的主要语言, 曾经有人预言 将成为下一代计算机的主要语言 目前还很难实现,不过世界上已经有许多prolog的应用实例了。你要 的应用实例了。 目前还很难实现,不过世界上已经有许多 的应用实例了 坚信,它绝对不是那种只在实验室发挥作用的语言, 坚信,它绝对不是那种只在实验室发挥作用的语言,之所以大多数人 都不了解它,是因为它的应用范围比较特殊而已。 都不了解它,是因为它的应用范围比较特殊而已。 prolog有许多不足之处,但是这并不影响它在逻辑推理方面的强大功 有许多不足之处, 有许多不足之处 不过最好的方法是使用某种一般语言和prolog结合,一般语言完 结合, 能,不过最好的方法是使用某种一般语言和 结合 成计算、界面之类的操作, 则专心实现逻辑运算的操作。 成计算、界面之类的操作,而prolog则专心实现逻辑运算的操作。例 则专心实现逻辑运算的操作 你编写一个下棋程序, 来让电脑思考如何下棋, 如:你编写一个下棋程序,用prolog来让电脑思考如何下棋,而用 来让电脑思考如何下棋 Visual Basic来编写界面。 来编写界面。 来编写界面
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(事实)
f m j s w
goal
likes(m, X), likes(j, X). (问题) 问题:是否 m 和 j 都喜欢什么东西?( X = ? )
2018/10/14
likes(m, f).
likes(m, w).
likes(j, w).
Prolog的求解过程
likes(j, s).
现在有两个问题:likes(m, X) 和 likes(j, X)) 第一步 :第一个问题 likes(m, X) 去与事实匹配
“ :- ”
“ ,”
表示“蕴涵”
表示“合取”
含义:若 P1 , … , Pn 均为真时,P为真
2018/10/14
③问题(目标) Goal
Q1 , Q2 , … , Qm
.
含义:待回答的问题,即 Q1 , … , Qm 同时
2018/10/14
为真吗?
从消解角度来看: ①(事实)中,P是Horn子句
2018/10/14
likes(j, s).
2018/10/14
第三步:回到第一个问题 likes(m, X) ,重新匹
配,得到 { w / X}
likes(m, X) likes(j, X)
第四步:第二个问题变成 likes(j, w)。再与事实 匹配,成功
likes(m, f).
第五步:答案就是 X=w
likes(m, w). likes(j, w). likes(j, s).
问题求解就是Horn子句集消解
2018/10/14
3 表结构
表:若干个元素的有序序列
表中的元素:常量、变量、项、表
表用“[ 开
2018/10/14
]”来表示,元素之间用逗号或者空格分
例:
[1, 2, 3]
[a, b, c, d]
2018/10/14
பைடு நூலகம்
用符号“ | ”来划分表头(第一个元素)和表尾
2018/10/14
②(规则)可以表示为
P1∧P2∧…∧PnP
可以转化为 ~P1∨~P2∨…∨~Pn∨P 也是Horn子句,并受全称量词约束
2018/10/14
③(问题)是
Q1∧…∧Qm
受存在量词约束,取非后 ~Q1∨…∨~Qm 受全称量词约束,是Horn子句
2018/10/14
Prolog三种形式的语言都是Horn子句
必定引起回溯
2018/10/14
例:求 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 去掉“ !”,会发生什么?
2018/10/14
⑤ 语句句型少,语法简明。只有三种句型
2018/10/14
参考资料:
1 雷英杰,张雷,邢清华,孙金萍。Visual Prolog 语言教程。西安:陕西科学技术出版社,2002
年2月(380页,35元)
2 雷英杰,邢清华,孙金萍,张雷。Visual Prolog 编程、环境及接口。北京:国防工业出版社, 2004年1月(412页,36元)
项的定义:
<项>::= <常量> | <变量> | <复合项>
2018/10/14
<项>::= <常量> | <变量> | <复合项>
<常量>::=<原子> | <数> <原子> ::= <标识符原子> | <字符串原子> | <特殊原子>
2018/10/14
标识符原子
命名 :用小写字母或者小写字母开头的小写字母 数字串
(其余元素)
特例: 当只用一个元素时,表尾为空 空表(无元素),既无表头又无表尾
2018/10/14
例: 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]
2018/10/14
4 Prolog程序的结构
Prolog的程序分为两部分:
前提部分:所有事实和规则 问题部分:目标子句序列
2018/10/14
注意:
这两部分不能颠倒。必须前提部分写在前 面,问题部分写在后面
2018/10/14
likes(m, f).
likes(m, w).
likes(j, w). likes(j, s).
(置换与合一),按顺序得到 {f/X}
2018/10/14
第二步:f 代替第二个问题 likes(j, X) 中的 X,
则得 likes(j, f) 。再与事实匹配,不能匹配, 失败,则回溯,忘掉刚才的匹配
likes(m, f). likes(m, X) likes(j, X) likes(m, w). likes(j, w).
人
工
智
能
Artificial Intelligence (AI)
2018/10/14
Prolog 语言简介
Prolog语言是一种以一阶谓词为基础的逻辑性语
言(Programming in Logic)
2018/10/14
Prolog语言的特点
Prolog语言的基本内容
简单的例子
2018/10/14
<原子>(<项>{, <项>}) <项> <原子> <项> { <原子> <项> }
2 Prolog中的语句
Prolog中的语句分成三种形式: ①事实: P. 含义:无条件成立,恒为真 例:like( monkey, banana)
2018/10/14
②规则: P :- P1 , P2 , … , Pn .
2018/10/14
Prolog语言的基本内容
1 项 2 Prolog中的语句 3 表结构 4 Prolog程序的结构
5 常用内部谓词
6 Prolog程序设计步骤
2018/10/14
1 项
符号说明:
“ ::= ” “|” “{}”
2018/10/14
表示“ 定义为 ” 表示 “ 或 ”,可选 表示 “ 重复或者出现多个 ”
?- uncle(a, U).
问题: a 是谁的叔叔 ? ( U = ? )
2018/10/14
Prolog的求解过程:
第一步:问题 uncle(a,U) 与事实逐个匹配,
不成功
father(a, b). father(c, d).
brother(a, c).
2018/10/14
uncle(a,U) uncle(X, Y) :- brother(X, Z) , father(Z, Y). 第二步:与规则头(左部)匹配,即寻找合一者, 有 {a/X, U/Y} 转化为两个子问题:brother(a, Z)和father(Z, U)
①若与另一个未实例化的变量 匹配 ,则视为同一变
量,两者共享
②若与另一个实例化的变量 匹配 ,也变成了实例化 的变量,且两者同值
③若与常量匹配,也变成了实例化变量,并取常量
的值
2018/10/14
第三、常量只能与相同的常量匹配
第四、实例化的变量与另一个实例化的值相同的 变量匹配,也可以与另一个未实例化的变量匹
2018/10/14
复合项:由一组其它对象组成的单个对象
例: 函数项: like(john, apple) 表: [sa, sb], [1,2,3]
表达式: (12+59)*49-96
2018/10/14
项
常量 原子
标 识 符 原 子
2018/10/14
变量 数
特 殊 原 子
复合项
字 符 串 原 子
对于“=”(赋值与比较)的几点说明: 第一 、当一个变量已经 实例化 ,则可以与任意 未实例化的变量相等,且将其实例化(赋值
功能)
第二、两者均未实例化,eq(X, Y) 恒为真,并 视为同一变量
2018/10/14
第三、均以实例化,由当前值来决定
第四、如果为表,要求对应的元素相等,才为真 第五 、如果是谓词,谓词 同名 ,变元个数相等,
对应的变元相等
2018/10/14
③输入输出谓词
第一、write(X):向输出设备输出实例化结果 第二、read(X): 当 X 未实例化时,输入一个项
当 X 在输入前已经实例化,则读入项将与 X
匹配,根据匹配的成功与否,决定其真假值
2018/10/14
④谓词cut与fail(特殊谓词):
cut ( ! ):禁止回溯
配,使另一个变量实例化,且约束值相同
2018/10/14
5 常用的内部谓词
内部谓词:Prolog系统本身定义的一些基本谓词
注意:可以直接使用,用户不能修改
2018/10/14
①算术运算
算术表达式由操作数(数、变量)、操作符和括
号组成
算术运算符号:“+、-、* 、/”(加减乘除)
2018/10/14
6 Prolog程序设计步骤
对应于Prolog程序的组成部分,设计步骤分为:
第一、说明事实:说明与待求解的问题有关的事
实。例如,人物事及相互关系,对应于 叙述