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语言 “与或”图表示法及其应用

信息技术学科教案时间(分)教学过程教师活动学生活动设计意图225(课前2分钟预备)复习提问:(2分钟)⒈知识表示遵循的思路?(讨论:自然语言→符号→计算机语言)⒉已经学过哪些知识表示的方法?(回答:框架、产生式、状态空间表示法)引入新课:(2分钟)实例分析1:证明三角形全等方法的知识表示。
(如:图1)图1:证明三角形全等方法的“或”图从而引出“与/或”图表示法及其应用的教学内容。
讲授新课:“与/或”图表示法及其应用一、“与/或”图表示法⒈“或”图图2:“或”图“或”图:“或”指的是当一个问题P变换为一组子问题P1、P2、P3 …Pn时,只要任意一个子问题有解,则原问题就有解。
只有当所有的子问题都无解时,原问题才无解。
这样原问题P与子问题之间的关系可以用“或”图来表示。
(如:图2),P:或节点。
任务一:(见《课堂练习》)画出边角边方法证明三角形全等(Q3)的“或”图。
分析:此问题变换为三个子问题Q31、Q32、Q33:三组边角边任意一组对应相等都可证明三角形全等。
组织提问播放分析分析归纳布置指导监查就坐安静思考回答观看思考回答观察思考理解思考完成组织课堂复习过实例引出新课便于理解由一般到特殊的认识规律达成教学目标之一5⒉“与”图由任务一引出探究问题1:用“边角边”方法证明一对三角形全等的子问题Q32图如何画?实例分析2:结合具体三角形分析利用“边角边”方法证明一对三角形全等,归纳出“与”图。
(如:图3)Q32:△ADE≌△CBEQ321:AD=CBQ322:∠ADE=∠CBEQ323:DE=EB图3:用“边角边”方法证明三角形全等的“与”图“与”图:“与”指当一个问题P可以分解为一组子问题P1、P2、P3 …Pn时,只有当所有的子问题都有解时,原问题才有解,任何一个子问题无解都会导致原问题无解,这样原问题与其所有的子问题之间的关系可以用“与”图”来表示。
(如:图4)图4:“与”图任务二:(见《课堂练习》)画出表示信息技术会考合格条件的“与”图。
AI-北大谢冰-10-prolog编程

7
Prolog语言的基本文法(续)
(2)变量表示任意的客体。与一阶谓词演算中霍恩子句 变量表示任意的客体。 变量表示任意的客体 的变元意义相同。 的变元意义相同。
用大写字母,下划线以及大写字母或下划线开头的字母串表示。 用大写字母,下划线以及大写字母或下划线开头的字母串表示。 eg: X, Y, Answer, _value 用单一下划线表示的变量称为匿名变量(anonymous variables) 用单一下划线表示的变量称为 当我们不关心对某一变量做了什么命名的时候, 当我们不关心对某一变量做了什么命名的时候,就可以对其用 匿名变量命名,同一语句中的匿名变量之间是相互独立的。 匿名变量命名,同一语句中的匿名变量之间是相互独立的。 ·可以用客体的名来对变量命名 可以提取变量的命名, ·可以提取变量的命名,对匿名变量除外
3、Visual Prolog:是基于 、 语言的可视化集成开发环境, :是基于Prolog语言的可视化集成开发环境,PDC推出的基于 语言的可视化集成开发环境 推出的基于 Windows环境的智能化编程工具。Visual Prolog是国际上研究和开发智能化 环境的智能化编程工具。 环境的智能化编程工具 是国际上研究和开发智能化 应用的主流工具之一。 应用的主流工具之一。
北大-谢冰-2009-10 3
2、PDC Prolog:1990年后,PDC推出新的版本,更名为 、 年后, 推出新的版本, : 年后 推出新的版本 更名为PDC Prolog 3.0,3.2, , , 它把运行环境扩展到OS/2操作系统,并且向全世界发行。它的主要特点是 操作系统, 它把运行环境扩展到 操作系统 并且向全世界发行。它的主要特点是:
北大-谢冰-2009-10 10
2.子句 子句: 子句
用于人工智能的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的基本语法规则:1. 事实(Facts):事实是描述真实情况的陈述,使用谓词表示。
例如:father(jack, john)表示"jack是john的父亲"。
2. 规则(Rules):规则定义了与事实之间的逻辑关系。
规则由头部和身体组成,使用":-"连接。
头部是一个谓词,身体是一个由逗号分隔的谓词列表。
例如:man(X) :- father(X, _), male(X)表示"如果X是某人的父亲且X是男性,则X是男人"。
3. 查询(Queries):查询用于检查一个特定条件是否成立。
查询以问号开头,使用谓词表示。
例如:?- man(X)表示"是否存在一个人X是男人"。
4. 变量(Variables):变量用大写字母或下划线开头。
变量在查询时用于接收结果。
例如:?- father(jack, X)表示"是否存在一个人X是jack的父亲"。
5. 列表(Lists):列表由方括号包围,其中的项由逗号分隔。
列表可以包含任何类型的元素,甚至包含其他列表。
例如:[1, 2, 3]表示一个包含数字1、2和3的列表。
6. 运算符:Prolog中的运算符被分为多个优先级和结合性。
常用的运算符包括算术运算符(+, -, *, /),比较运算符(<, >,=<, >=, =:=, \=)和逻辑运算符(,;,!,\+)。
7. 注释(Comments):Prolog中的注释以%开头,直到行末。
这些是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语言编程练习一、实验目的加强学生对逻辑程序运行机能的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。
二、实验环境在Turbo PROLOG或Visual Prolog集成环境下调试运行简单的PROLOG程序,三、实验内容运行给定的五个程序,验证程序,得到结果,理解逻辑程序的特点,熟悉程序的编辑、编译和调试过程四、实验步骤1、打开Turbo prolog2.0文件,启动prolog.exe应用程序,并按空格键(SPACE)进入集成开发环境。
2、选择Setup项,打开下拉菜单,选择Directories项,进行工作目录修改,按Esc键退出,选择Save Configuration项,保存修改。
3、在相应的路径所在文件件夹中会生成work.Pro文件将其用文本打开,将要运行的程序写入,保存。
4、选择Files项,选择Load项,选择要打开的示例程序5、编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,查看程序运行结果,分析程序之功能。
6、仿前例,可以选择其他程序并运行,分析程序功能。
7、退出,选择Quit项,可以退出Turbo Prolog程序。
五、实验源程序验证题1:domainsd=integerpredicatesnot_(D,D)and_(D,D,D)or_(D,D,D)xor(D,D,D)clausesnot_(1,0).not_(0,1).and_(0,0,0).and_(0,1,0).and_(1,0,0).and_(1,1,1).or_(0,0,0).or_(0,1,1).or_(1,0,1).or_(1,1,1).xor(Input1,Input2,Output):-not_(Input1,N1),/*(1,0)*/not_(Input2,N2),/*(0,1)*/and_(Input1,N2,N3),and_(Input2,N1,N4),or_(N3,N4,Output).验证题2:predicatesstudent(integer,string,real)gradegoalgrade.clausesstudent(1,"zhang",90.2).student(2,"li",95.5).student(3,"wang",96.4).grade:-write("Please input name:"),readln(Name), student(_,Name,Score),nl,write(Name,"grade is",Score).grade:-write("Sorry,the student cannot find!").验证题3:domainsn,f=integerpredicatesfactorial(n,f)goalreadint(I),factorial(I,F),write(I,"!=",F).clausesfactorial(1,1).factorial(N,Res):-N>0,N1=N-1,factorial(N1,FacN1),Res=N*FacN1.验证题4:domainss=symbolpredicatesp(s) p1(s) p2(s) p3(s) p4(s) p5(s,s) p11(s) p12(s) p31(s) goalp(X),write("the x is ",X).clausesp(a1):-p1(b),p2(c).p(a2):-p1(b),p3(d),p4(e).p(a3):-p1(b),p5(f,g).p1(b):-p11(b1),p12(b2).p3(d):-p31(d1).p2(c1).p4(e1).p5(f,g).p11(b1).p12(b2).p31(d11).验证题5:domainsname=symbolage =integer predicatesplayer(name,age)match(name,name) cluasesplayer(peter, 9).player(paul, 10).player(chris, 9).player(susan, 9).六、实验结果验证一:计算数的非,与,或,异或,验证逻辑关系,非,与,或,异或的正确性图1.1图1.2验证二:查找某个人的成绩图2 验证三:计算数的阶层图3验证四:走迷宫找出口图4验证五在外部Goal: match(X,Y)条件下,分别采用以上各match谓词,观察对应的执行结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015-3-24
②比较谓词
eq(X, Y) ne(X, Y) gt(X, Y) X=Y X<>Y X>Y
ls(X, Y)
2015-3-24
X<Y
对于 “= 、<> ”,
X,Y 可以取
常量 变量 谓词 表
2015-3-24
对于“=”(赋值与比较)的几点说明: 第一 、当一个变量已经 实例化 ,则可以与任意 未实例化的变量相等,且将其实例化(赋值
么”,不要告诉系统 “如何做” ② 数据与程序的统一表达。提供一种统一的符
号结构 “项动实现模式匹配与回溯。这是人工智能中最常 用的两项操作,Prolog自动实现这些操作
④ 程序易于编写与阅读。它是面向人的自然语言
⑤ 语句句型少,语法简明。只有三种句型
2015-3-24
程序的一般结构(组成部分)
Visual Prolog程序包括三到四个基本程序段:
第一、域段:说明谓词变量的域(类型) 第二、谓词段:说明非标准谓词(用户自己的
人
工
智
能
Artificial Intelligence (AI)
2015-3-24
Prolog 语言简介
Prolog语言是一种以一阶谓词为基础的逻辑性语
言(Programming in Logic)
2015-3-24
Prolog语言的特点
Prolog语言的基本内容
简单的例子
2015-3-24
Prolog语言的特点
2015-3-24
第一个子问题 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).
2015-3-24
6 Prolog程序设计步骤
对应于Prolog程序的组成部分,设计步骤分为:
第一、说明事实:说明与待求解的问题有关的事
实。例如,人物事及相互关系,对应于 叙述
性知识
2015-3-24
第二、定义规则:定义个体及其相互关系的推理 规则,反映与待求解问题有关的过程性知识
第三:确定目标(问题):提出待求解的问题或 者确定逻辑推理的目标
2015-3-24
]”来表示,元素之间用逗号或者空格分
例:
[1, 2, 3]
[a, b, c, d]
2015-3-24
用符号“ | ”来划分表头(第一个元素)和表尾
(其余元素)
特例: 当只用一个元素时,表尾为空 空表(无元素),既无表头又无表尾
2015-3-24
例: P([the, cat, sat, down]).
用途 :用于标识对象的名字、谓词(对象间的关
系)或函数名 例:john, marry, classmate, teacher
2015-3-24
字符串原子是用引号括起来的符号串
特殊原子指一些特殊符号,如 +、-、*、 / 等
2015-3-24
<项>::= <常量> | <变量> | <复合项>
变量:用于表示暂时不能命名或者不需要命
Prolog语言(或者系统)是以一阶谓词逻辑的 Horn 子句集为语法,以Robinson的消解原理 为工具,加上深度优先的控制策略而形成的人
工智能通用程序设计语言
2015-3-24
Prolog系统
Horn 消 解 原 理 深 度 优 先
子 句 集
2015-3-24
Prolog具有下列特点:
① 是一种描述性语言。只需要告诉 “系统做什
①若与另一个未实例化的变量 匹配 ,则视为同一变
量,两者共享
②若与另一个实例化的变量 匹配 ,也变成了实例化 的变量,且两者同值
③若与常量匹配,也变成了实例化变量,并取常量
的值
2015-3-24
第三、常量只能与相同的常量匹配
第四、实例化的变量与另一个实例化的值相同的 变量匹配,也可以与另一个未实例化的变量匹
名的对象,用大写字母开头
2015-3-24
特殊变量:空变量,记作:“_”
含义:我们对问题的某一个变量的值不关心
2015-3-24
<项>::= <常量> | <变量> | <复合项>
<复合项> ::= <原子>(<项> { , <项> })| <项> <原子> <项> { <原子> <项> }
2015-3-24
复合项:由一组其它对象组成的单个对象
例: 函数项: like(john, apple) 表: [sa, sb], [1,2,3]
表达式: (12+59)*49-96
2015-3-24
项
常量 原子
标 识 符 原 子
2015-3-24
变量 数
特 殊 原 子
复合项
字 符 串 原 子
<原子>(<项>{, <项>}) <项> <原子> <项> { <原子> <项> }
2 Prolog中的语句
Prolog中的语句分成三种形式: ①事实: P. 含义:无条件成立,恒为真 例:like( monkey, banana)
2015-3-24
②规则: P :- P1 , P2 , … , Pn .
“ :- ”
“ ,”
表示“蕴涵”
表示“合取”
含义:若 P1 , … , Pn 均为真时,P为真
2015-3-24
Prolog语言的基本内容
1 项 2 Prolog中的语句 3 表结构 4 Prolog程序的结构
5 常用内部谓词
6 Prolog程序设计步骤
2015-3-24
1 项
符号说明:
“ ::= ” “|” “{}”
2015-3-24
表示“ 定义为 ” 表示 “ 或 ”,可选 表示 “ 重复或者出现多个 ”
配,使另一个变量实例化,且约束值相同
2015-3-24
5 常用的内部谓词
内部谓词:Prolog系统本身定义的一些基本谓词
注意:可以直接使用,用户不能修改
2015-3-24
①算术运算
算术表达式由操作数(数、变量)、操作符和括
号组成
算术运算符号:“+、-、* 、/”(加减乘除)
2015-3-24
优先级:与通常的数学运算一致 形式:中缀:X+Y*Z
2015-3-24
第三步:回到第一个问题 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).
2015-3-24
第二步:f 代替第二个问题 likes(j, X) 中的 X,
则得 likes(j, f) 。再与事实匹配,不能匹配, 失败,则回溯,忘掉刚才的匹配
likes(m, f). likes(m, X) likes(j, X) likes(m, w). likes(j, w).
likes(j, s).
2015-3-24
关于 fail 的说明:
作为一个子目标,使 Prolog 程序运行到 fail,
必定引起回溯
2015-3-24
例:求 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 去掉“ !”,会发生什么?
2015-3-24
likes(m, f).
likes(m, w).
likes(j, w).
Prolog的求解过程
likes(j, s).
现在有两个问题:likes(m, X) 和 likes(j, X)) 第一步 :第一个问题 likes(m, X) 去与事实匹配
(置换与合一),按顺序得到 {f/X}
2015-3-24
参考资料:
1 雷英杰,张雷,邢清华,孙金萍。Visual Prolog 语言教程。西安:陕西科学技术出版社,2002
年2月(380页,35元)
2 雷英杰,邢清华,孙金萍,张雷。Visual Prolog 编程、环境及接口。北京:国防工业出版社, 2004年1月(412页,36元)
brother(a, c).
2015-3-24
Prolog的实现方法主要是:匹配与回溯
匹配:合一过程、消解过程 回溯:搜索,而且是深度优先搜索
2015-3-24
关于匹配的几点说明: 第一 、一个变量 被置换 后,代入了另一个 项 , 则称该变量为实例化的变量
2015-3-24
第二、一个未实例化的变量可以与任何项匹配:
?- P([ X | Y ]).
答案:X=the, Y=[cat, sat, down]
?-P([ X , Y | Z ]).
答案:X=the, Y=cat,Z=[sat, down]
2015-3-24
4 Prolog程序的结构