实验二:使用Prolog的一阶逻辑推理实验

合集下载

prolog实验报告小结

prolog实验报告小结

prolog实验报告小结Prolog实验报告小结在本次实验中,我们使用了Prolog编程语言来解决一系列逻辑推理和知识表示的问题。

Prolog是一种基于逻辑的编程语言,它使用逻辑规则和事实来进行推理和查询。

在本次实验中,我们学习了如何使用Prolog来表示知识,并使用它来解决一些经典的逻辑问题。

首先,我们学习了如何使用Prolog来表示事实和规则。

通过使用事实和规则,我们可以建立一个知识库,其中包含了我们关于世界的知识。

然后,我们可以使用这些知识来进行逻辑推理,找出答案或解决问题。

在实验中,我们还学习了如何使用Prolog来进行逻辑查询。

通过编写查询语句,我们可以向Prolog系统询问特定的问题,然后系统会使用已有的知识库来进行推理,并给出答案。

这种方式非常适合于解决逻辑问题,比如逻辑谜题或者逻辑推理问题。

此外,我们还学习了如何使用Prolog来实现递归。

递归是一种非常重要的编程技术,它可以帮助我们处理一些复杂的问题,比如树形结构或者列表操作。

在本次实验中,我们使用Prolog来实现了一些递归算法,比如计算阶乘或者斐波那契数列。

总的来说,本次实验让我们对Prolog编程语言有了更深入的了解。

通过实际操作,我们学会了如何使用Prolog来表示知识、进行逻辑推理和解决问题。

Prolog是一种非常强大的编程语言,它可以帮助我们解决许多复杂的逻辑问题,而且在人工智能领域也有着广泛的应用。

希望通过本次实验,同学们都能对Prolog有更深入的了解,并能够在以后的学习和工作中运用到这种强大的编程语言中。

Prolog实验报告-科技学院

Prolog实验报告-科技学院
inform(Loc1, Loc2):-nl,
write('Move a disk from '-Loc1-' to '-Loc2).
2、传教士与野人问题
源程序:
%船上所能够载人的状态就是可能的操作
move(1,0). %表示船上有一位牧师,没有野人。
move(0,1).
move(0,2).
move(2,0).
五、求解的问题与程序
1、汉诺塔问题
源程序:
hanoi(N):-move(N,left,middle,right).
move(1,A,_,C):-inform(A,C),!.
move(N,A,B,C):-N1 is N-1,move(N1,A,C,B),inform(A,C),move(N1,B,A,C).
2>、把最后一个盘子直接移到右边的杆子上
3>、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子作为临时存放盘子的位置)
2、传教士与野人问题
假设开始时传教士、野人和船都在右岸 用数组(a,b,c)分别表示右岸传教士个数、右岸野人个数、船的位置 则可分为三种情况讨论: A、n>m/2。此种情况下 先把所有的野人度过去 每次返回一个野人 当出现(m,0,0)情况时 返回m-n个野人(若m==n,返回1个野人)。然后渡n个传教士 此时野人==传教士 然后返回一个野人和传教士 再开始最大限度的渡传教士 每次返回一个野人,最终直到a==b==c==0B、n<=3&&n<=m/2 || n==1显然此时无解C、n>=4&&n<=m/2此时只能每次传n/2个传教士和野人,每次返返回一个野人和传教士,直到最终结果。

Prolog编程练习 实验报告

Prolog编程练习 实验报告

武 夷 学 院实验报告数学与计算机系PROLOG编程练习一、目的要求进入实验机房,加深学生理解-逻辑程序运行的机理,如简单逻辑与、或、非的运算等;使学生掌握PROLOG语言(也可用数据库、C或C++语言中逻辑类指令来实现的语言)的特点、熟悉其编程环境,同时为后面人工智能程序设计做好准备。

二、实验内容在Turbo PROLOG 或 Visual Prolog 集成环境下调试运行简单的PROLOG程序,如描述亲属关系的PROLOG程序,或其它语言小型演绎数据库程序,等等。

具体要求:1.程序自选,但必须是描述某逻辑关系的小程序(也可用数据库指令或C或C++语言实现)。

2.跟综程序运行过程,理解逻辑程序特点(特别是逻辑值状态等)。

3.对原程序可做适当修改,以方便熟悉程序的编辑、编译和调试等过程。

4.示例程序(逻辑电路模拟程序),详见教材P295-296。

⑴逻辑“与”运算⑵逻辑“或”运算⑶逻辑“非”运算三、实验环境Windows 7 , dev c++四、实验步骤1.概述逻辑程序运行的机理答:逻辑程序设计将逻辑直接作为程序设计语言并将计算作为受控推理的一种程序设计技术。

这种将逻辑与控制分开的方法具有下列的优点:①可以在控制部分设计之前不断改进逻辑程序。

②可以改进控制部分而无需变动逻辑程序本身。

③可以从程序说明中生成逻辑程序,加以验证和变换,而无需考虑其控制部分。

④只需在逻辑程序中规定目标和实现这些目标的现有条件,也就是只需告诉系统做什么(What to do),至于如何执行也就是说怎样做(How to do),则由系统的控制部分,即解释程序处理解决。

2.写出逻辑程序语言特点及其编程环境(结合你所选择语言系统硬软件情况)# include <stdlib.h>IntMain(){Int a,b,c;c = a || b; /* 或,与,非*/c = a && b;c = !a;c = !b;}五、实验心得体会通过本次实验,我懂得了什么是逻辑编程语言,懂得了基本的逻辑关系,与逻辑的实现。

人工智能PROLOG程序

人工智能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语言逻辑编程课件

Prolog语言逻辑编程课件

Prolog语言逻辑编程课件Prolog语言是一种逻辑编程语言,它基于一种称为谓词逻辑的形式化语言。

本课件将为您介绍Prolog语言的基本概念、语法和应用,并提供一些实例来帮助您更好地理解和应用Prolog编程。

一、Prolog语言简介Prolog是“Programming in Logic”的缩写,它的特点是以谓词逻辑为基础,通过规则和事实之间的逻辑关系进行推理和查询。

Prolog程序由一组规则和事实构成,并通过提出查询来运行程序。

其独特的逻辑编程方式使得Prolog在人工智能、专家系统、自然语言处理等领域有着广泛的应用。

二、Prolog语法1. 数据类型:在Prolog中,有几种基本的数据类型,包括原子(atom)、数字(number)、变量(variable)和复合(compound)数据类型。

每个数据类型都有其特定的表示方法和使用规则。

2. 规则和事实:Prolog程序由一组规则和事实构成。

规则由头(head)和体(body)组成,头部是一个谓词,体部是一个查询条件。

规则描述了一个逻辑关系,当查询满足规则中的条件时,将会得到规则中定义的结果。

3. 查询:Prolog程序需要通过提出查询来运行。

查询是一个谓词,通过与规则中的条件进行匹配来得到满足查询条件的结果。

Prolog会在规则和事实中搜索匹配的项,并返回匹配的结果。

三、Prolog编程实例接下来,我们将通过几个实例来演示Prolog语言的具体应用。

1. 父子关系查询:```father(john, david).father(john, ann).father(david, mary).- father(john, X).```该查询将会返回所有满足父亲为john的人。

2. 数字求和:```sum(0, 0).sum(N, Result) :- N > 0, M is N-1, sum(M, SubResult), Result is SubResult + N.- sum(5, X).```该查询将会返回数列1到5的和。

prolog实验报告

prolog实验报告

华北电力大学实验报告||实验名称PROLOG语言编程练习及图搜索问题求解课程名称人工智能及应用专业班级:学生姓名:学号:成绩:指导教师:实验日期:2014年5月(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。

)验证性、综合性实验报告应含的主要内容:一、实验目的及要求二、所用仪器、设备三、实验原理四、实验方法与步骤五、实验结果与数据处理六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)七、所附实验输出的结果或数据设计性实验报告应含的主要内容:一、设计要求二、选择的方案三、所用仪器、设备四、实验方法与步骤五、实验结果与数据处理六、结论(依据“设计要求”)七、所附实验输出的结果或数据reverse_writelist([H|T]):-reverse_writelist(T),write(H),nl.empty_stack([]).stack(Top,Stack,[Top|Stack]).reverse_print_stack(Stack):-empty_stack(Stack).reverse_print_stack(Stack):-stack(E,Rest,Stack),reverse_print_stack(Rest),write(E),nl.member(X,[X|T]).member(X,[_|T]):-member(X,T).member_stack(Element,Stack):-member(Element,Stack).go(Start,Goal):-empty_stack(Empty_been_stack),stack(Start, Empty_been_stack, Been_stack),path(Start, Goal, Been_stack).test:-go(state(w,w,w,w), state(e,e,e,e)).六、讨论与结论Prlolg的求解过程就是一个不断通过规则进行匹配,最后匹配到事实后回溯得出解的过程。

prolog实验报告PROLOG语言编程练习及图搜索问题求解

prolog实验报告PROLOG语言编程练习及图搜索问题求解

华北电力大学
实验报告
|
|
实验名称PROLOG语言编程练习及图搜索问题求解
课程名称人工智能及应用
专业班级:学生姓名:
学号:成绩:
指导教师:实验日期:2014.5.28
(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。


验证性、综合性实验报告应含的主要内容:
一、实验目的及要求
二、所用仪器、设备
三、实验原理
四、实验方法与步骤
五、实验结果与数据处理
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)
七、所附实验输出的结果或数据
设计性实验报告应含的主要内容:
一、设计要求
二、选择的方案
三、所用仪器、设备
四、实验方法与步骤
五、实验结果与数据处理
六、结论(依据“设计要求”)
七、所附实验输出的结果或数据
* 封面左侧印痕处装订
1、字谜问题
结果输出
2、八皇后问题
结果输出
zebra.txt程序中,如何定义房间的位置关系?
答:next(A,B,[A,B,C,D,E])A的房间的下一个房间是B房间。

Prolog逻辑编程语言建模实践案例分享

Prolog逻辑编程语言建模实践案例分享

Prolog逻辑编程语言建模实践案例分享在计算机科学领域中,逻辑编程语言被广泛应用于问题求解和知识表达方面。

Prolog(Programming in Logic)作为其中的一种重要逻辑编程语言,具有非常强大的建模能力。

本文将通过分享几个Prolog建模实践案例,以展示该语言在解决实际问题时的优势。

1. 汽车诊断系统假设我们要设计一个汽车诊断系统,可以根据用户输入的车辆异常症状来判断可能的故障原因,并给出相应的修复建议。

利用Prolog可以轻松地建立一个知识库,其中包含各种不同故障及其症状的关联。

例如,如果发动机发出异常声音并且油耗增加,系统可以根据这些输入自动诊断可能是排气系统问题,并给出相应的修复建议。

通过使用Prolog的模式匹配和逻辑推理机制,我们可以快速有效地实现这样一个汽车诊断系统。

2. 旅行规划系统假如我们要设计一个旅行规划系统,用户可以输入自己的出发地和目的地,系统可以自动帮助用户规划最佳的旅行路线。

利用Prolog可以很方便地建立一个地理知识库,其中包含各个城市之间的距离、交通方式和时间等信息。

通过在这个知识库上进行逻辑推理,系统可以根据用户提供的起始点和目标点,找到最短的路线,并提供相应的交通工具和时间表。

这样的旅行规划系统可以帮助用户减少在规划旅行时的繁琐工作,提供更好的旅行体验。

3. 学生选课系统学生选课是每个大学校园中重要的事务之一。

利用Prolog 可以轻松地建立一个学生选课系统,用于帮助学生选择合适的课程。

系统可以根据学生的兴趣、先修课程要求和当前可选课程等信息,提供最佳的选课建议。

通过在Prolog知识库中存储学生的个人信息、课程信息和选修规则等数据,系统可以利用Prolog的逻辑推理功能,从中推导出最佳的选课方案。

这样的学生选课系统将大大减轻学生选课过程中的困扰,提供更加个性化的课程选择。

通过上述案例的分享,我们可以清楚地看到Prolog逻辑编程语言在建模实践中的优势。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二:使用Prolog的一阶逻辑推理实验
班级;智能1401
姓名:蒙寿伟
学号:201408070120
一.实验目的
1.学会使用Prolog语言;
2.用Prolog语言巩固一阶逻辑知识;
3.能够使用prolog语言实现一阶逻辑的证明;
二、实验的硬件、软件平台
硬件:计算机
软件:操作系统:WINDOWS 10
应用软件:Prolog
三、实验内容及步骤
熟悉prolog语言的使用并实现对于一阶逻辑推理的证明
实验步骤:
1:对于a,b,c,d四种输入情况,验证|?- p(a).的真假;
a.p(b). p(a) :- p(b). p(a) :- p(c)
推理分析:
事实:p(b)为真.
推理:由p(b)为真可以推出p(a)为真,由p(c)为真可以推出p(a)为真. 结论:p(a)为真.
运行结果:
b. p(c). p(a) :- p(b). p(a) :- p(c).
推理分析:
事实:p(c)为真.
推理:由p(b)为真可以推出p(a)为真,由p(c)为真可以推出p(a)为真. 结论:p(a)为真.
运行结果:
c. p(b). p(a) :- p(b) ,p(c).
推理分析:
事实:p(b)为真.
推理:由p(b)为真且p(c)为真可以推出p(a)为真.
结论:p(a)为假.因为p(b)未知.
d. p(c). p(a):- p(b) ; p(c).
推理分析:
事实:p(b)为真.
推理:由p(b)为真或p(c)为真可以推出p(a)为真.
结论:p(a)为真.
2.验证
?-friend(john,Y).
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).
推理分析:
1.如果X喜欢音乐,而且喜欢阅读,那么X是john的朋友。

2.如果X喜欢音乐,而且喜欢运动,那么X是john的朋友。

相关事实:mary喜欢音乐也喜欢运动。

结论:mary是john的朋友。

运行结果:
3.验证
likes(bill,X)
likes(ellen,tennis).
likes(john,football).
likes(tom,baseball).
likes(eric,swimming).
likes(mark,tennis).
likes(bill,X) if likes(tom,X).
推理分析:
如果tom喜欢X,则bill喜欢X。

相关事实:tom喜欢baseball
结论:bill喜欢baseball
运行结果:
4.构建与,或,非,异或表达,并验证。

代码:
and(X,Y) :- X,Y.
or(X,Y) :- X;Y.
no(X) :- not(X).
xor(X,Y) :- X\==Y.
推理分析: 推理:X,Y都为真时and(X,Y)为真。

X,Y有一个为真时or(X,Y)为真。

X为真时no(X)为真。

X不等于Y时,异或xor(X,Y)
为真。

运行结果:
5.已知兄弟sib(X, Y)的定义如下
sib(X, Y):- p(Z, X), p(Z, Y), X \== Y.
5.1:定义堂兄弟co(X, Y);
5.2; 定义二代堂兄弟sco(X, Y),X,Y的父母是堂兄弟。

并做验证。

代码:
p(ye,ba).
p(ye,bo).
p(ba,wo).
p(bo,tg).
p(wo,tom).
p(tg,jerry).
sib(X,Y) :- p(Z,X),p(Z,Y), X\==Y.
co(X,Y) :- sib(A,B),p(A,X),p(B,Y),A\==B,X\==Y.
sco(X,Y) :- co(A,B),p(A,X),p(B,Y),A\==B,X\==Y.
推理分析:
当X不等于Y,Y且Z是和Y的父亲,则X和Y是兄弟。

当A不等于B,X不等于Y,A和B是兄弟,且A是X的父亲,B是Y的父亲,则X和Y是堂兄弟。

当A不等于B,X不等于Y,A和B是堂兄弟,且A是X的父亲,B是Y的父亲,则X和Y是二代堂兄弟。

相关事实:
ye是ba和bo的父亲,ba是wo的父亲,bo是tg的父亲,wo是tom的父亲,tg 是jerry的父亲。

结论:
Wo和tg是堂兄弟,tom和jerry是二代堂兄弟。

运行结果:
6.自动实现搜索算法-回溯,判断JOHN是谁的朋友
TOM喜欢TALK,BILL喜欢游泳,BILL喜欢谈话;若X既喜欢TALK,有喜欢SWIM,则JOHN是X的朋友。

代码:
likes(tom,talk).
likes(bill,swim).
likes(bill,talk).
friend(X,Y) :- likes(X,talk),likes(X,swim).
推理分析:
当X喜欢talk,且喜欢swimming,则X是Y的朋友。

相关事实:bill喜欢talk,且喜欢swimming。

结论:bill是JOHN的朋友。

运行结果:
7.谁是盗窃犯问题:某人被盗,公安局派出所派出5个侦察员去调查。

研究案情时:
侦察员A说:“赵与钱中至少有一人作案”;
侦察员B说:“钱与孙中至少有一人作案”;
侦察员C说:“孙与李中至少有一人作案”;
侦察员D说:“赵与孙中至少有一人与此案无关”;
侦察员E说:“钱与李中至少有一人与此案无关”。

如果这5个侦察员的话都是可信的,试编程求出谁是盗窃犯,并给出Prolog.程序。

代码:
spyA(X,Y):-(X=true);(Y=true).
spyB(X,Y):-(X=true);(Y=true).
spyC(X,Y):-(X=true);(Y=ture).
spyD(X,Y):-(X=false);(Y=false).
spyE(X,Y):-(X=false);(Y=false).
find([Zhao,Qian,Sun,Li]):-spyA(Zhao,Qian),spyB(Qian,Sun),spyC(Sun,Li) ,spyD(Zhao,Sun),spyE(Qian,Li).
推理分析:
定义谓词:Crime(x)表示x作案。

则已知事实:
(1) Crime(Zhao) ∨ Crime(Qian)
(2) Crime(Sun) ∨ Crime(Qian)
(3) Crime(Sun) ∨ Crime(Li)
(4) Crime(Zhao) ∨ Crime(Sun)
(5) Crime(Qian) ∨ Crime(Li)
推理:
Find(Zhao) V Crime(Qian)
Find(Zhao) V Crime(Sun)
Find(Zhao) V Crime(Li)
归结结果,Zhao不是罪犯,按照同样的方法得:
Qian 是罪犯,Sun 也是罪犯。

结果:
钱和孙作案。

四、思考题
1.在题目2中PROLOG搜索过程是怎样的,试用树的结构表示,并计算其推理步数。

先搜索是否有喜欢reading 的,发现没有,然后搜索是否有喜欢sports 的,发现bell 和mary 喜欢sports ,继续搜索bell 是否喜欢music ,发现不喜欢,继续搜索mary 是否喜欢music ,发现喜欢,即mary 满足是john 朋友的条件,由此判断mary 是john 的朋友。

故推理步数为4步。

2.PROLOG 语言和其它语言(如C 语言)做逻辑推理,你更喜欢哪一个,简要说说差别。

Prolog 是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog 就使用内部的演绎推理机制自动求解程序给定的目标,而不需要像C 语言那样要在程序中列出详细的求解步骤。

Prolog 给人的感觉就是你提出问题,让机器自己去想怎么实现,而C 语言则是你要去想怎么实现。

如果从解决逻辑推理来说,我更喜欢Prolog 语言。

reading music
sports
mary
bell
Mary 是 john 的朋友
1
2
3
4。

相关文档
最新文档