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详细教程

逻辑型程序设计语⾔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程序。

第四章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语言入门

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)。
brother(a, c).
2017/4/13
Prolog的实现方法主要是:匹配与回溯
匹配:合一过程、消解过程 回溯:搜索,而且是深度优先搜索
2017/4/13
关于匹配的几点说明: 第一 、一个变量 被置换 后,代入了另一个 项 , 则称该变量为实例化的变量
2017/4/13
第二、一个未实例化的变量可以与任何项匹配:
前缀:+(X,*(Y,Z))
2017/4/13
②比较谓词
eq(X, Y) ne(X, Y) gt(X, Y) X=Y X<>Y X>Y
ls(X, Y)
2017/4/13
X<Y
对于 “= 、<> ”,
X,Y 可以取
常量 变量 谓词 表
2017/4/13
对于“=”(赋值与比较)的几点说明: 第一 、当一个变量已经 实例化 ,则可以与任意 未实例化的变量相等,且将其实例化(赋值
复合项:由一组其它对象组成的单个对象
例: 函数项: like(john, apple) 表: [sa, sb], [1,2,3]
表达式: (12+59)*49-96
2017/4/13

常量 原子
标 识 符 原 子
2017/4/13
变量 数
特 殊 原 子
复合项
字 符 串 原 子
<原子>(<项>{, <项>}) <项> <原子> <项> { <原子> <项> }
2 Prolog中的语句
Prolog中的语句分成三种形式: ①事实: P. 含义:无条件成立,恒为真 例:like( monkey, banana)
2017/4/13
②规则: P :- P1 , P2 , … , Pn .


“ :- ”
“ ,”
表示“蕴涵”
表示“合取”
含义:若 P1 , … , Pn 均为真时,P为真
2017/4/13
参考资料:
1 雷英杰,张雷,邢清华,孙金萍。Visual Prolog 语言教程。西安:陕西科学技术出版社,2002
年2月(380页,35元)
2 雷英杰,邢清华,孙金萍,张雷。Visual Prolog 编程、环境及接口。北京:国防工业出版社, 2004年1月(412页,36元)
2017/4/13
Prolog语言的基本内容
1 项 2 Prolog中的语句 3 表结构 4 Prolog程序的结构
5 常用内部谓词
6 Prolog程序设计步骤
2017/4/13
1 项
符号说明:
“ ::= ” “|” “{}”
2017/4/13
表示“ 定义为 ” 表示 “ 或 ”,可选 表示 “ 重复或者出现多个 ”
么”,不要告诉系统 “如何做” ② 数据与程序的统一表达。提供一种统一的符
号结构 “项” ,数据与程序都是由项组成
2017/4/13
③ 自动实现模式匹配与回溯。这是人工智能中最常 用的两项操作,Prolog自动实现这些操作
④ 程序易于编写与阅读。它是面向人的自然语言
⑤ 语句句型少,语法简明。只有三种句型
名的对象,用大写字母开头
2017/4/13
特殊变量:空变量,记作:“_”
含义:我们对问题的某一个变量的值不关心
2017/4/13
<项>::= <常量> | <变量> | <复合项>
<复合项> ::= <原子>(<项> { , <项> })| <项> <原子> <项> { <原子> <项> }
2017/4/13
2017/4/13
第一个子问题 brother(a, Z) 与事实匹配,得到{c/Z} 代人第二个子问题,有 father(c, U)。与事实匹配,
得到 {d/U},即 U=d,解是:a是d 的叔叔
father(a, b).
brother(a, Z) father(Z, U)
father(c, d).
2017/4/13
③问题(目标) Goal
Q1 , Q2 , … , Qm
.
含义:待回答的问题,即 Q1 , … , Qm 同时
2017/4/13
为真吗?
从消解角度来看: ①(事实)中,P是Horn子句
2017/4/13
②(规则)可以表示为
P1∧P2∧…∧PnP
可以转化为 ~P1∨~P2∨…∨~Pn∨P 也是Horn子句,并受全称量词约束
用途 :用于标识对象的名字、谓词(对象间的关
系)或函数名 例:john, marry, classmate, teacher
2017/4/13
字符串原子是用引号括起来的符号串
特殊原子指一些特殊符号,如 +、-、*、 / 等
2017/4/13
<项>::= <常量> | <变量> | <复合项>
变量:用于表示暂时不能命名或者不需要命




Artificial Intelligence (AI)
2017/4/13
Prolog 语言简介
Prolog语言是一种以一阶谓词为基础的逻辑性语
言(Programming in Logic)
2017/4/13
Prolog语言的特点
Prolog语言的基本内容
简单的例子
2017/4/13
Prolog语言的特点
2017/4/13
注意:
这两部分不能颠倒。必须前提部分写在前 面,问题部分写在后面
2017/4/13
likes(m, f).
likes(m, w).
likes(j, w). likes(j, s).
(事实)
f m j s w
goal
likes(m, X), likes(j, X). (问题) 问题:是否 m 和 j 都喜欢什么东西?( X = ? )
2017/4/13
第三步:回到第一个问题 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).
2017/4/13
]”来表示,元素之间用逗号或者空格分
例:
[1, 2, 3]
[a, b, c, d]
2017/4/13
用符号“ | ”来划分表头(第一个元素)和表尾
(其余元素)
特例: 当只用一个元素时,表尾为空 空表(无元素),既无表头又无表尾
2017/4/13
例: P([the, cat, sat, down]).
项的定义:
<项>::= <常量> | <变量> | <复合项>
2017/4/13
<项>::= <常量> | <变量> | <复合项>
<常量>::=<原子> | <数> <原子> ::= <标识符原子> | <字符串原子> | <特殊原子>
2017/4/13
标识符原子
命名 :用小写字母或者小写字母开头的小写字母 数字串
2017/4/13
关于 fail 的说明:
作为一个子目标,使 Prolog 程序运行到 fail,
必定引起回溯
2017/4/13
例:求 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 去掉“ !”,会发生什么?
2017/4/13
程序的一般结构(组成部分)
Visual Prolog程序包括三到四个基本程序段:
第一、域段:说明谓词变量的域(类型) 第二、谓词段:说明非标准谓词(用户自己的
当 X 在输入前已经实例化,则读入项将与 X
匹配,根据匹配的成功与否,决定其真假值
2017/4/13
④谓词cut与fail(特殊谓词):
cut ( ! ):禁止回溯
fail: 强迫回溯
2017/4/13
关于cut的几点说明: 第一、只允许作为一个子目标出现在程序中 第二、第一次遇到它时,总是立刻被满足,但是 不能被重新满足 第三、用户可以使用它来控制回溯方式,切断一 些不必要的回溯,提高程序运行效率
配,使另一个变量实例化,且约束值相同
2017/4/13
5 常用的内部谓词
内部谓词:Prolog系统本身定义的一些基本谓词
注意:可以直接使用,用户不能修改
2017/4/13
①算术运算
算术表达式由操作数(数、变量)、操作符和括
号组成
算术运算符号:“+、-、* 、/”(加减乘除)
2017/4/13
优先级:与通常的数学运算一致 形式:中缀:X+Y*Z
2017/4/13
第二步:f 代替第二个问题 likes(j, X) 中的 X,
则得 likes(j, f) 。再与事实匹配,不能匹配, 失败,则回溯,忘掉刚才的匹配
likes(m, f). likes(m, X) likes(j, X) likes(m, w). likes(j, w).
相关文档
最新文档