AI PROLOG语言
no
3
【例4.2】求解以下六个英语单词的纵横字谜 问题。
abalone, abandon, anagram, connect, elegant, enhance
事实
规则
2020/10/16
4
2020/10/16
aac ab and on
aan e l egant
or e e nhan c e
13
2020/10/16
14
在线资源
1. Learn Prolog Now! by Patrick Blackburn, Johan Bos, and Kristina Striegnitz
/
2. ON-LINE GUIDE TO PROLOG PROGRAMMING by ROMAN BARTÁK
Prolog的基本语句仅有三种,即事实、规则和目标。
Prolog是陈述性语言,一旦给它提交必要的事实和规则之后, Prolog就使用内部的演绎推理机制自动求解程序给定的目标, 而不需要在程序中列出详细的求解步骤。
1、事实
事实用来说明一个问题中已知的对象和它们之间的关系。 在Prolog程序中,事实由谓词名及用括号括起来的一个或几 个对象组成。谓词和对象可由用户自己定义。
例如,likes(bill,book).
是一个名为like的关系,表示对象bill和book之间有喜欢的 关系。
2020/10/16
7
2、规则 由几个互相有依赖性的简单句(谓词)组成,用来描
述事实之间的依赖关系。从形式上看,规则由左边表示结 论的后件谓词和右边表示条件的前提谓词组成。
bird(X):-animal(X),has(X,feather). 表示凡是动物并且有羽毛,那么它就是鸟。 3、目标(问题)
目标的结构与事实或规则相同,可以是一个简单的谓 词,也可以是多个谓词的组合。目标分内、外两种,内部 目标写在程序中,外部目标在程序运行时由用户手工键入。
?-student(john). 表示“john是学生吗?”
2020/10/16
8
三、Prolog运行机理
1. 自由变量与约束变量
自由变量即无值的变量,约束变量即有值的变量。
/ 安装文件(注意顺序安装):
SWI-Prolog for M源自-Windows(version 5.4.7 ) SWI-Prolog-Editor
2020/10/16
11
不安装SWI-Prolog-Editor
2020/10/16
12
2020/10/16
emt aee aba l one ae h a na g r am dan c on ne c t nte
查询/ 目标
5
4.2 Prolog语言概述
一、所有的Prolog语句由项(term)构成
1. 常量
原子(atom):Prolog的符号值 以小写字母开始的一串字母、数字、下划线或用单引 号界定的一串任何可打印的ASCII字符。
vertical(line(point(1,1),point(1,3))). yes
horizontal(line(point(1,1),point(2,Y))). Y=1; no
horizontal(line(point(2,3),P)).
P = point(_G434,3) ;
2020/10/16
2
【例4.1】:水平线与垂直线问题。
使用两个谓词:vertical/2 和 horizontal/2
事实 什么是真的? vertical(line(point(X,Y),point(X,Z))).
horizontal(line(point(X,Y),point(Z,Y))).
需要做什么?
查询/ 目标
2) Y、Z的约束值相同或至少有一个自由变量时,才可匹配合一。
2020/10/16
9
3. 通过提问查询知识库;使用分号( ;)查询多 个解(multiple answers);
分号有特定的含义:表示结束当前合一,回溯查找其 它可满足的解。
2020/10/16
10
四、Prolog实验环境
SWI-Prolog(推荐使用!)
整数
2. 变量
以大写字母开始一串字母、数字和下划线; 下划线(_)表示匿名变量; 注意与命令式语言中变量的区别。
3. 结构(谓词/复杂项)
谓词演算的原子命题 2020/10/16 functor(term_1,...,term_n) 算符(项1,…,项n) 6
二、Prolog语言及其基本结构
2. 匹配合一
两谓词可匹配合一,指谓词名相同,参数个数和类型对应相同,另: a) 若两个均为常量,则必须相同; b) 若两个为约束变量,则两约束值相同; c) 若一个为常量,一个为变量,则约束值与常量相同; d) 至少有一个自由变量。 例:p(“ob1”,”ob2”,z). p(“ob1”,X,Y). 只有当1) X被约束为”ob2”,
第四章 PROLOG语言
4.1 逻辑程序设计概述 4.2 Prolog语言概述
➢ Prolog实验环境 ➢ 在线资源
4.3合一与控制流 4.4 表处理
➢ 基本概念 ➢ 表处理及其应用举例
2020/10/16
0
4.1 逻辑程序设计概述
一、LISP、PROLOG是常用的人工智能语言。 LISP——函数程序设计语言, 20世纪50年代后期。 PROLOG——逻辑程序设计语言,20世纪70年代中期。
Lisp语言创始人 McCarthy
目前C、C++使用比较多。 专家系统开发语言或开发工具。
如:CLIPS语言。
2020/10/16
1
二、逻辑程序设计语言(说明性语言)
1. Prolog是唯一广泛使用的逻辑程序设计语言;
易于表达人的思维,主要应用于专家系统、规划、自然 语言理解、机器定理证明等人工智能相关问题的求解。
2. 区别于命令式语言和函数式语言,逻辑式语言 都支持说明性程序设计风范;
1)根据问题约束的高层描述来构建程序;
2)告诉计算机“什么是真的”和“需要做什么”,而 不是“怎样做”;
3)允许程序员集中精力对待求解问题(一个封闭的世 界)的描述,而不是写一些诸如“下一步做什么”之 类的底层算法指令。
2020/10/16
人工智能语言——PROLOG
人工智能语言——PROLOG作者:王春莲王海霞来源:《电脑知识与技术·学术交流》2008年第05期摘要:Prolog是人工智能语言的一个典型代表。
本文简要阐述了人工智能语言及其特点,并通过实例介绍了Prolog语言及其基本结构。
关键词:人工智能语言;Prolog;递归中图分类号:TP312文献标识码:A文章编号:1009-3044(2008)05-10ppp-0cProlog的思想最早由R. Kowalski提出,1972年,第一个prolog语言在法国的马赛研制成功,最初设计思想是以FOL为背景,设计一个处理逻辑推理问题的会话式语言。
Prolog 目前是AI应用中重要的开发工具,也是开发知识库、ES、自然语言接口、智能信息管理系统的重要工具。
1 什么是人工智能语言人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。
能够用它来编写程序求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。
典型的人工智能语言主要有LISP、Prolog、Smalltalk、C++等。
一般来说,人工智能语言应具备如下特点:(1)具有符号处理能力;(2)适合于结构化程序设计,编程容易;(3)具有递归功能和回溯功能;(4)具有人机交互能力;(5)适合于推理。
人们可能会问,用人工智能语言解决问题与传统的方法有什么区别呢?传统方法通常把问题的全部知识以各种的模型表达在固定程序中,问题的求解完全在程序制导下按着预先安排好的步骤一步一步(逐条)执行。
解决问题的思路与冯.诺依曼式计算机结构相吻合。
当前大型数据库法、数学模型法、统计方法等都是严格结构化的方法。
对于人工智能技术要解决的问题,通常需要建立一个知识库,程序根据环境和所给的输入信息以及所要解决的问题来决定自己的行动,所以它是在环境模式的制导下的推理过程。
这种方法有极大的灵活性、对话能力、有自我解释能力和学习能力。
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语言
在示例程序中,添加有关性别的信息: 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 语言编程一、实验目的1.加深学生对逻辑程序运行机理的理解。
2.掌握PROLOG 语言的特点、熟悉其编程环境。
3.为今后人工智能程序设计做好准备。
二、预习要求1.复习PROLOG 语言的语法。
2.熟悉PROLOG 的语言环境。
3.阅读一些PROLOG 的程序。
三、实验内容1、编写一个描述亲属关系的PROLOG 程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
2、编写一个路径查询程序,使其能输出图中所有路径。
提示:程序中的事实描述了下面的有向图,规则是图中两节点间通路的定义。
3、一个雇主在发出招聘广告之后,收到了大量的应聘申请。
为了从中筛选出不量的候选人,该雇主采用下列判据:申请者必须会打字、开车,并且住在伦敦。
(a )用Prolog 规则表述这个雇主的选择准则。
(b )用Prolog 事实描述下列申请者的情况:史密斯住在剑桥,会开车但不会打字。
布朗住在伦敦,会开车也会打字。
简住在格拉斯哥,不会开车但会打字。
埃文斯住在伦敦,会开车也会打字。
格林住在卢顿,会开车也会打字。
(c )要求Prolog 提供一个候选人名单。
e四、代码1、编写一个描述亲属关系的PROLOG程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
domainsname=symbol.predicatesmother(name,name).father(name,name).grandfather(name,name).grandmother(name,name).sister(name,name).aunt(name,name).goalgrandmother(a,X),write("X=",X),nl,father(b,Y),write("Y=",Y),nl,sister(d,Z),write("Z=",Z),nl,aunt(d,T),write("T=",T).clausesmother(a,c).mother(a,d).mother(c,g).mother(c,f).father(b,c).father(b,d).father(e,g).father(e,f).grandfather(X,Z):-father(X,Z),father(Y,Z).grandmother(X,Z):-mother(X,Y),mother(Y,Z).sister(X,Y):-mother(Z,X),mother(Z,Y).aunt(X,Y):-mother(Z,Y),sister(Z,X).2、编写一个路径查询程序,使其能输出图中所有路径。
人工智能技术基础实验报告
人工智能技术基础实验报告姓名:学号:班级:指导教师:完成时间:实验一 PROLOG语言编程练习1目的与要求实验目的:加强学生对逻辑程序运行机能的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。
实验要求:(1)程序自选,但必须是描述某种逻辑关系的小程序。
(2)跟踪程序的运行过程,理解逻辑程序的特点。
(3)对原程序可作适当修改,以便熟悉程序的编辑、编译和调试过程。
2实验环境Turbo PROLOG3实验内容在Turbo PROLOG或Visual Prolog集成环境下调试运行简单的PROLOG程序,如描述亲属关系的PROLOG程序或其他小型演绎数据库程序等。
4实验题目与结果(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 =integerpredicatesplayer(name,age)match(name,name)clausesplayer(peter,9).player(paul,10).player(chris,9).player(susan,9).match(X,Y):- player(X,9), player(Y,9), X<>Y.match(X,Y):- !, player(X,9), player(Y,9), X<>Y.match(X,Y):- player(X,9), !, player(Y,9), X<>Y.match(X,Y):- player(X,9), player(Y,9), !, X<>Y. match(X,Y):- player(X,9), player(Y,9), X<>Y, ! .实验结果:5问题及解决:第一个程序中,简单定义了与、或、非、异或,之后验证异或结果是否正确,输入数据即可,但是注意电脑是二进制,只能输入1,0。
prolog语言简介
可以回溯 如果加入 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 影响回溯的手段之二
例1 clauses likes(tom,talk). /*1*/ likes(bill,swim). likes(bill,talk). likes(mary,wine). likes(tom,X):- likes(mary,X). 如果Goal:likes(bill,talk) 与第3句匹配一致 如果Goal: likes(tom,wine) 与第5句左部匹配{wine/ X} 任务转化为likes(mary,wine) 与第3句匹配一致
/*1*/ /*2*/ /*3*/ /*4*/ /*5*/
运行
Dialog Goal: likes(tom,swim) False
例2
clauses fact(1,1 ) . /*1*/ fact(X,Y):- X1 =X-1, fact(X1,Y1), Y=X*Y1 . /*2*/ 设Goal:fact(2,N) 与1匹配失败 与2左部匹配成功 {2/X , N/Y} 产生三个子目标: (1) X1=2-1 (2) fact(X1,Y1) (3) N=2*Y1 运行 (1) X1=1 立即成功 Dialog Goal:fact(2,N) (2) fact(1,Y1) N=2 与/*1*/ 匹配成功 {1/Y1 } 1 Solutions (3) N=2*1=2 成功
DOMAINS child=symbol age=integer PREDICATES player(peter,9) player(paul,10) player(chris,9) player(susan,9) goal player(Person1,9), player(Person2,9), Person<>Person2
人工智能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语言有许多版本
项或者是常量,或者是变量,或者是一个结构。
AI(AI语言)
人工智能语言
规则的一般形式为: p:-p1,p2,p3,……,pn. 其中p1,p2,p3,……,pn均为命题,逗号“,”表示合取。 规则的语义是:如果“p1Λp2Λ……Λpn”为真,则p 就为真,即规则头部就为真。 在一条规则中,相同的变量代表了相同的客体,而 在规则的不同使用时,变量可以代表不同的客体。 但规则的同一次使用中,对一变量的解释必须完全 一致。
人工智能语言
3、目标 Prolog语言是一种可会话式语言; 执行一个Prolog程序实际上就是进行人机对话,在 将事实和规则存入数据库或知识库中后,就可以向 系统询问一些有关它们的问题,而问题就是系统求 解的目标 ; Prolog语言的询问的一般形式为: ?-p1,p2,……,pn. 其中“?-”是Prolog语言的询问的特殊符号, p1,p2,……,pn的意义与规则中的意义相同; 询问的语义是:“p1Λp2Λ……Λpn是为真吗?”
项:所有的程序和数据均由项构成,并且都是树型结构。
(3)Prolog语言能够自动实现模式匹配和回溯 (4)递归是Prolog语言的重要特点之一 一个大的数据结构常能由一小的程序来处理。 (5)语法简明 程序结构非常简单,由三个部分(事实、规则、 询问 )组成。
人工智能语言
1、事实 事实用来说明有关客体及客体之间的相互关系 如:likes(john,mary). 可表示John喜欢Mary。 谓词和确定的客体(常量)必须以小写字母开头, 而变量客体用大写字母开头,如 likes(john,X)., 注意:最后用“.” 结束。 语句意义的解释由编程员所确定 如likes(john,mary),可解释成John喜欢 Mary,也可解释成Mary喜欢John
人工智能语言
四、人工智能语言的特点
用Prolog编写的人工智能专家系统设计与实现
用Prolog编写的人工智能专家系统设计与实现人工智能(Artificial Intelligence,AI)作为一门前沿的科学技术,正在逐渐渗透到各个领域,并在其中发挥着重要作用。
专家系统(Expert System)作为人工智能的一个重要分支,在知识表示和推理方面具有独特优势,被广泛应用于医疗、金融、工业控制等领域。
而Prolog作为一种逻辑编程语言,其规则引擎和模式匹配特性使其成为构建专家系统的理想选择。
本文将介绍如何使用Prolog编写人工智能专家系统,包括设计思路、实现步骤和案例分析。
1. 专家系统概述专家系统是一种模拟人类专家决策过程的计算机程序,通过将专家的知识和经验转化为计算机可处理的形式,来解决复杂的问题。
专家系统通常由知识库、推理机制和用户接口三部分组成,其中知识库存储了领域知识,推理机制根据用户输入的问题和知识库中的规则进行推理,最终给出结论或建议。
2. Prolog简介Prolog是一种基于逻辑的编程语言,其核心思想是利用逻辑规则进行推理。
Prolog程序由事实(Facts)和规则(Rules)组成,通过匹配规则中的条件来实现推理过程。
Prolog具有强大的模式匹配能力和自动回溯机制,非常适合用于构建专家系统。
3. 人工智能专家系统设计3.1 知识表示在设计人工智能专家系统时,首先需要将领域知识表示为Prolog 中的事实和规则。
事实通常包括对象之间的关系或属性,而规则描述了根据某些条件得出结论的推理过程。
例如,在医疗领域的专家系统中,可以表示疾病与症状之间的关系,以及根据症状推断可能患有的疾病。
3.2 推理机制推理是专家系统的核心功能,Prolog通过自动搜索匹配规则来实现推理过程。
当用户提出问题时,系统会根据用户输入的信息和知识库中的规则进行匹配,并逐步推导出结论。
如果存在多个可能的结论,Prolog会尝试不同路径直到找到所有可能解。
3.3 用户接口为了方便用户与专家系统交互,需要设计友好的用户接口。
