Prolog语言(耐心看完,你就入门了)

合集下载

Prolog语言(耐心看完-你就入门了)剖析

Prolog语言(耐心看完-你就入门了)剖析
2024/8/13
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语言

第四章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语言简介

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

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语言入门简介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解决⼀些实际问题之前必须要先了解它们。

这些概念在这本书中都有介绍,我简单提炼汇总下,就当给这门⼩众语⾔做个宣传吧。

变量/规则/知识库在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的一些内建谓词
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语言简介讲解

信息技术与工程学院课程名称人工智能论文题目人工智能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在美国、加拿大、西欧、澳大利亚、新西兰、日本、韩国、新加坡等发达国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。

目前,中国在智能化领域的教学、研究、开发及应用正在迎来一个蓬勃发展的新时期,拥有较多的群体,对这种工具软件的需求已经逐渐显现出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
第二、定义规则:定义个体及其相互关系的推理 规则,反映与待求解问题有关的过程性知识
相关文档
最新文档