PROLOG实验报告
prolog实验报告小结
prolog实验报告小结Prolog实验报告小结在本次实验中,我们使用了Prolog编程语言来解决一系列逻辑推理和知识表示的问题。
Prolog是一种基于逻辑的编程语言,它使用逻辑规则和事实来进行推理和查询。
在本次实验中,我们学习了如何使用Prolog来表示知识,并使用它来解决一些经典的逻辑问题。
首先,我们学习了如何使用Prolog来表示事实和规则。
通过使用事实和规则,我们可以建立一个知识库,其中包含了我们关于世界的知识。
然后,我们可以使用这些知识来进行逻辑推理,找出答案或解决问题。
在实验中,我们还学习了如何使用Prolog来进行逻辑查询。
通过编写查询语句,我们可以向Prolog系统询问特定的问题,然后系统会使用已有的知识库来进行推理,并给出答案。
这种方式非常适合于解决逻辑问题,比如逻辑谜题或者逻辑推理问题。
此外,我们还学习了如何使用Prolog来实现递归。
递归是一种非常重要的编程技术,它可以帮助我们处理一些复杂的问题,比如树形结构或者列表操作。
在本次实验中,我们使用Prolog来实现了一些递归算法,比如计算阶乘或者斐波那契数列。
总的来说,本次实验让我们对Prolog编程语言有了更深入的了解。
通过实际操作,我们学会了如何使用Prolog来表示知识、进行逻辑推理和解决问题。
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房间。
人工智能实验报告(梵塔问题)
实验准备(预 习程序)
PREDICATES hanoi(integer) move(integer,symbol,symbol,symbol) inform(symbol,symbol). CLAUSES hanoi(N):-move(N,a,b,c). move(1,A,_,C):-inform(A,C),!. move(N,A,B,C):-N1=N-1,move(N1,A,C,B), inform(A,C),move(N1,B,A,C). inform(Loc1,Loc2):-nl,write("移动 1 个盘子从柱" ,Loc1,"到 柱",Loc2). GOAL hanoi(4).
n 1
,n 为盘子的数目。最早提出这个问题的人设
定的盘子数目为 64,这就是说需要 2 641 =18446744073709551615 次 移动,假设计算机每秒钟能够计算 10,000,000(一千万)次,那也需 要 58494 年,所以千万不要试图使用此程序来解较大的数。 让我们来看看如何用递归来解决这个问题: 如果只有一个盘子,直接移过去就行了,这是递归的边界条件。 如果要移动 N 个盘子,就要分三步走: 1、把 N-1 个盘子移动到中间的杆子上(把右边的杆子作为临时 存放盘子的位置) 。 2、把最后一个盘子直接移到右边的杆子上。 3、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子
实验报告
1.掌握 Visual Prolog 软件编程使用方法; 2.掌握 Prolog 程序的各域段含义; 3.进一步学习分析、运用递归方法解决问题。
实验目的
计算机、Visual Pro有盘子移到右边的杆子上。一次 只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地 方。在移动的过程中,小盘子必须放在大盘子之上。给出完成上述操 作的过程。 提示:如果盘子只有两三个,是很容易解决的。但是随着盘子数 目的增加, 问题就变得非常难解了。 事实上, 已经通过数学证明过了, 实验内容 最少的移动次数是 2
北邮人工智能PROLOG实验报告
实验报告学院:计算机学院课程名称:人工智能原理实验名称:Prolog班级:姓名:学号:用PROLOG完成以下系统的编写。
給出代码和一个运行实例。
根据主要的燃烧材料,可把火灾归类。
把以下信息转换成规则,以决定火灾的类型。
A类火灾包括如纸、木和布等普通易燃物。
B类火灾包括易燃液体(如石油和石油气)、油脂和类似的物质。
C类火灾包括使用电力的电器。
D类火灾包括易燃的金属,如镁、钠、钾。
用来灭火的灭火器类型取决于火的类型。
把下面的信息转换成规则:A类火灾应该使用吸热或阻燃型灭火器灭火,如水或水类液体和无水化学品。
B类火灾应该通过隔绝空气、抑制易燃蒸汽的释放或终止易燃物的连锁反应来灭火。
灭火器包括无水化学品、二氧化碳、泡沫和含溴三氟甲烷。
C类火灾应该使用防短路的非导电媒质灭火。
如果可能的话,应切断电源。
灭火器包括无水化学品、二氧化碳和含溴三氟甲烷。
D类火灾应该使用焖熄法和不与燃烧金属发生反应的吸热化学品灭火。
这些化学品包括:三甲氧硼化物和涂有石墨的焦炭。
描述规则中所用的事实。
输出结果应显示可以使用何种灭火器以及应该采取的其他措施,如切断电源。
软件版本:Visual Prolog 5.2:源代码FireExtinguisher如下:predicatesFireA(symbol)FireB(symbol)FireC(symbol)Fired(symbol)Nondeterm treatment(symbol,symbol,symbol)clausesFireA(paper). /*纸*/FireA(wood). /*木*/FireA(cloth). /*布*/FireB(oil). /*石油*/FireB(oil_gas). /*石油气*/FireB(fat). /*油脂*/FireC(machine). /*电器*/FireD(magnesium). /*镁*/FireD(kalium). /*钾*/FireD(natrium). /*钠*/treatment(Material, " Heat absorbing or flame retardant type fire extinguisher \n" ," \n"):-FireA(Material).treatment(Material, "Water chemical, carbon dioxide, foam and bromine containing three fluorine methane fire extinguisher\n" ,"\n"):-FireB(Material).treatment(Material, " Anhydrous chemicals, carbon dioxide, foam and bromine containing three fluorine methane fire extinguisher \n" ," Cut off the power supply \n"):-FireC(Material).treatment(Material, " Trimethoxy boride and coated with graphite coke fire extinguisher \n" ," \n"):-FireD(Material).goaltreatment(machine,Whatkind,How).运行结果:。
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
数学与软件科学学院实验报告学期:___至___ 第 __ 学期年月日课程名称:___人工智能 ___ 专业: _级__ _班实验编号:01实验项目熟悉Prolog语言环境和程序编写方法指导教师__姓名:_ __ 学号: __实验成绩:_____一、实验目的及要求(1) 熟悉VIP(Visual Prolog 5.2)的安装、运行环境;(2)基本Prolog程序语言技术(包含表的创建、查找、分解、拼接等主要技术)。
二、实验内容(1) 安装VIP;(2) 熟悉VIP的基本环境(掌握一个Prolog语言程序或工程的构建方法、测试目标、代码浏览等基本操作方法);(3)了解和熟悉一个实际的Prolog程序文件的基本结构。
例如:DOMAINS/PREDICATES/CLAUSES/GOAL等;(4) 编写并执行简单的Prolog程序,并熟悉测试或调试的方法。
三、实验准备及设备准备好VIP安装源;复习有关Prolog语言的上课记录;按实验大纲要求事先编制几个简单的Prolog语言程序,并根据Prolog的执行特点分析其执行结果过程,预测其执行结果。
四、实验步骤和实验过程及实验结果(1)安装VIP软件环境,如果已安装好,可以跳过此步;(2) 熟悉Prolog语言环境;打开prolog应用程序图标,可以看到整个菜单有File, Edit, Project, Options, Window和Help六种功能。
其下面是浮动菜单条,最下面有消息窗口和提示信息窗口。
File子菜单:主要涉及有关文件的操作。
新建、打开、关闭/保存/另存为、打印操作。
Edit子菜单:进入编辑器进行相应的文本编辑操作。
Project子菜单:有关工程文件的菜单功能。
主要用于生成一个包含多个文件和资源的工程环境及相关参数设置。
Options子菜单:其包括Project和Global两项内容的选择设置。
Project主要是有关Project的目录、编译方式、代码生成方法和运行参数和执行文件的生成等方面。
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作业2013 实验报告
作业:用PROLOG完成以下系统的编写。
給出代码和一个运行实例,指出某人吞入毒物后要采取什么措施。
已知下列毒物:酸(如去溴剂、碘酒)、碱(如氨水、漂白剂),以及石油产品(如汽油、松节油)。
其他所有毒物归为其他类型other类。
中毒时,应呼叫医师或中毒控制中心。
对于酸、碱和其他类型毒物,应该让病人喝水或牛奶之类的液体以稀释毒药。
对于其他类型的毒物,要呕吐。
但对于酸、碱或石油产品不能呕吐。
如果病人神志不清或惊厥,则不要喝水类液体,也不要呕吐。
*写出一个运行实例(输入、输出)。
源代码:predicatesacid(symbol)alkali(symbol)oil(symbol)other(symbol)patient_unaware(symbol)patient_aware(symbol)emergency_treatment(symbol,symbol,symbol)goalemergency_treatment(aware,bleach,What).clausesacid(take_bromine). /*去溴剂*/acid(iodine).alkali (ammonia_water).alkali(bleach).oil(gasoline).oil(turpentine).other(_).patient_unaware(unaware).patient_aware(aware).emergency_treatment(Patient,Drug,"can't drink"):-patient_unaware(Patient),other(Drug),fail. emergency_treatment(Patient,Drug,"can't vomit"):-patient_unaware(Patient),other(Drug).emergency_treatment(Patient,Drug,"can drink"):-patient_aware(Patient),acid (Drug),fail. emergency_treatment(Patient,Drug,"can't vomit"):-patient_aware(Patient),acid (Drug). emergency_treatment(Patient,Drug,"can drink"):-patient_aware(Patient),alkali (Drug),fail. emergency_treatment(Patient,Drug,"can't vomit"):-patient_aware(Patient),alkali (Drug). •emergency_treatment(Patient,Drug,"can't vomit"):-patient_aware(Patient),oil(Drug). emergency_treatment(Patient,Drug,"drink"):-patient_aware(Patient),other(Drug),fail. emergency_treatment(Patient,Drug,"vomit"):-patient_aware(Patient),other(Drug).运行实例:输入是emergency_treatment (aware,gasoline,What)输出是What=can't vomit1 Solution。
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语言>>教学实习报告题目:动物识别系统学号 0908054113 姓名丁浩轩系别计算机科学与信息工程系专业班级软件工程1班指导教师马国强成绩评定2012年8月目录1 开发内容 (1)1.1 开发目标 (1)1.2 实习任务 (1)1.3 运行设备及环境 (1)1.4 实习主要步骤 (1)2 问题及算法 (1)2.1 问题的描述 (1)2.2 算法的一般思路 (2)2.3求解问题的算法描述 (3)2.4 算法实现的关键技巧 (4)3 运行结果与分析 (13)5 程序分析及结论 (14)1 开发内容1.1 开发目标(1)综合应用“知识表示”、“知识获取”、“知识利用”这三个人工智能技术的基本知识以及程序设计的相关知识。
(2)通过设计一个专家系统,并使用Prolog语言将其实现,加深对专家系统和Prolog语言的了解。
1.2 实习任务使用prolog编写一个动物识别的专家系统,并对其尽可能多地进行改进。
1.3 运行设备及环境PC机; prolog软件1.4 实习主要步骤根据任务目标,明确开发的具体任务;设计求解问题的流程图,并编写程序实现算法;2问题及算法2.1 问题的描述尽管专家系统有众多类型, 名称各异, 但基本原理框图一致, 如图 1 所示。
专家系统的核心是知识库和推理机, 其基本工作过程为: 系统根据知识库中的知识和用户提供的事实进行推理, 不断地由已知前提推出一些初步结论, 并将这些初步结论作为中间结果存放在数据库中, 然后将其作为新的已知事实进行下一步推理, 往复循环, 逐步逼近求解目标。
在这个过程中, 系统可以通过人机接口不断地与用户交流, 向用户提问, 或对用户提出的问题做出解释。
知识库是专家系统的知识存储器, 用来存放求解问题的领域知识( 包括事实性知识和启发性知识) 。
常见的知识表示法有: 一阶谓词逻辑表示法、产生式规则表示法、语义网络表示法、框架表示法、脚本表示法、过程表示法、状态图表示法、面向对象表示法以及一些不确定知识的表示方法等。
逻辑程序语言实验报告
逻辑式程序语言实验报告目录一实验目的 (3)二实验要求 (3)三实验环境 (3)四实验过程 (3)1 目标:了解Prolog程序的基本结构。
(3)2 目标:了解Prolog的求解过程。
(5)3 用Prolog编程解决实际问题。
(7)四实验感想 (9)一实验目的1 通过实验理解逻辑式程序语言的基本概念和特征。
2 学习prolog程序编写和分析,熟悉prolog编程环境。
3 学会使用prolog解决一般逻辑问题。
二实验要求(1)在网上下载开源的PROLOG软件,并安装运行;(2)用PROLOG编写2~3道程序并上机验证通过;(3)提交实验报告,写出使用该语言的体会。
三实验环境windows7 32位操作系统编译器:SWI-Prolog编辑器:SWI-Prolog-Editor四实验过程1 目标:了解Prolog程序的基本结构。
根据下面的图形,求出a是谁的叔叔?代码如下:father(a,b).father(c,d).brother(a,c).uncle(X,Y):-brather(X,Z),father(Z,Y).使用SWI-Prolog-Editor编辑如下:在SWI-Prolog下编译,并且输入目标即可得到结果:我们可以看到图中,a是d的叔叔,所以求解正确。
在上面的代码中,1~3行是事实,即对图形关系的描述。
4行是规则,是对已知事实进行推理的依据。
最后在编译器端输入的是目标,是所要求解的问题。
2 目标:了解Prolog的求解过程。
如下图,求m和j都喜欢什么东西?代码如下:likes(m,f).likes(m,w).likes(j,w).likes(j,s).goallikes(m,X),likes(j,X).在编辑器中输入事实和规则:编译并且输入目标问题得到:分析:从图中知道,m和j确实共同喜欢的是w。
Prolog求解过程如下:(1)现在有两个问题:likes(m,X)和likes(j,X).(2)第一步:第一个问题likes(m,X)去与事实匹配,安顺寻得到{f/X}(也就是用f置换变量X)。
实验二:使用Prolog的一阶逻辑推理实验
实验二:使用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的朋友。
VisualProlog实验(DOCX页)
实验一Visual Prolog运行环境实验(1学时)一、实验目的1、了解PROLOG解释器;2、掌握PROLOG语言中常量、变量的表示方法;3、掌握利用PROLOG进行事实库、规则库的编写方法。
二、实验要求1、熟悉Visual Prolog运行环境,包括硬件与软件环境;2、学习示例程序,分析其功能;3、写出Example 1、Example 2、Example 3示例程序的功能;4、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问。
三、实验设备计算机,Visual prolog教学软件。
四、实验内容及步骤(一)实验内容:1、熟悉Visual prolog的运行环境,包括所用的机器的硬件与软件环境;2、学习使用Visual prolog,包括进入Prolog主程序、编辑源程序、修改环境目录、退出等基本操作;3、学习Visual prolog的简单程序结构,掌握分析问题、询问解释技巧;4、了解PROLOG语言中常量、变量的表示方法;5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问。
(二)实验步骤:1、启动Windows 2000操作环境;2、安装Visual Prolog集成开发环境;3、双击桌面图标或者找到Visual Prolog可执行文件所在目录双击图标,启动Visual prolog集成开发环境;4、打开Project菜单,选择New Project菜单项,将工作目录修改为你要保存到的文件夹,例如,c:\11,给出工程文件名;5、打开Option菜单,选择Project菜单项打开下拉菜单,选择Compiler Options项,按下图中显示进行设置;6、从工程界面中选择“new”按钮或者从file菜单中选择“new”菜单项,弹出一个界面,将所有的复选框都去掉,进入Visual Prolog的程序编辑界面;7、将下面的Example 1编辑到编辑界面里面,Project菜单里面的Test goal菜单项或者直接点击菜单栏中的Test Goal按钮执行程序。
人工智能上机实验
人工智能技术实验报告姓名:学号:班级:实验一 PROLOG语言编程练习一. 实验目的:加强学生对逻辑程序运行机能的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。
二.实验环境:Windows XP操作环境,Visual Prolog集成环境三.实验内容:在Turbo PROLOG或Visual Prolog集成环境下调试运行简单的PROLOG程序,如描述亲属关系的PROLOG程序或其他小型演绎数据库程序等。
四.实验要求:(1)程序自选,但必须是描述某种逻辑关系的小程序。
(2)跟踪程序的运行过程,理解逻辑程序的特点。
(3)对原程序可作适当修改,以便熟悉程序的编辑、编译和调试过程。
五.实验过程及结果:实验过程:(1)启动Windows操作环境。
(2)下载、安装Turbo PROLOG,了解它的运行模式及功能。
(3)打开文件目录,执行prolog应用程序,启动Turbo prolog,并按空格键(SPACE)进入集成开发环境。
(4)选择Setup项,打开下拉菜单,选择Directories项,进行工作目录修改,按Esc键退出,选择Save Configuration项,保存修改。
(5)选择Files项,打开下拉菜单,选择New file项,进入源程序输入和编辑,或选择Load项,选择要打开的示例程序,再选择Edit项,可以进行编辑源程序。
(6)编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,查看程序运行结果,分析程序之功能。
(7)仿前例,可以选择其他程序并运行,分析程序功能。
退出,选择Quit项,可以退出Turbo Prolog程序,返回到Windows环境。
实验源程序:(1)求X: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).验证结果:通过运行程序,得出结果X是a3(2)求阶乘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.运行结果:通过程序,可以得出一定数字的阶乘。
程序语言prolog_实验报告
(2)打开 SWI-Prolog,单击打开选项,选择刚才生成的程序解释 文件“家谱.pl”运行。
图 2 运行文件“家谱.pl” (3)检验程序。根据程序已知相互关系和给定关系规则,通过询 问语句检测程序的正确性。首先,分别输入并执行如下语句: grandfather(X,c). ——问 c 的(外)祖父是谁。 grandmother(Y,c). ——问 c 的(外)祖母是谁。 daughter(a1,Z). ——问 a1 的女儿是谁。 如图 3 所示,程序回答结果如下: X = a1. Y = a2. Z = b2.
就是对递归功能运用。 (四)Prolog 没有特定的运行顺序,顺序由电脑决定。比如问题
2 中,选择 a 到 g 的路径,如果不使用关键字“fail”,当执行语句 “path(a,g,L),write(L). ”时,并不能决定程序给出哪条路径。由于 程序员不能决定程序运行顺序,所以 Prolog 没有其它语言的 if、when、 case、fo 控制流程语句。
father(b1,c). mother(a2,b2). mother(b2,c). grandfather(X,Y):-father(X,Z),father(Z,Y). grandfather(X,Y):-father(X,Z),mother(Z,Y). grandmother(X,Y):-mother(X,Z),father(Z,Y). grandmother(X,Y):-mother(X,Z),mother(Z,Y). daughter(X,Y):-father(X,Y),female(Y). 执行解释后保存为 Prolog 文件“家谱.pl”。
问题 1:假设有这样一个家庭成员示意图:
a1
实验一 Prolg简介及简单程序设计
实验一Prolog简介及简单程序设计一、实验目的1、掌握Visual Prolog软件并调试运行程序;2、熟悉Prolog语言的基本结构;3、理解Prolog程序的推理机制;4、学会用Prolog语言编写简单的程序。
二、实验原理1、Visual Prolog语言的基本知识及开发环境。
2、谓词逻辑表示知识的方法、事实和规则的表示方法。
3、简单逻辑推理机制。
三、实验设备1、计算机PC 一台2、Visual Prolog 5.2四、实验内容和步骤1、熟悉Visual Prolog软件的使用;新建文件夹:命令“File | New”,产生一个标题为"NONAME"的文件;运行程序:GOAL write("Hello world"),nl. Project | Test Goal或Ctrl+G。
2、运行程序1,找出程序中的错误并进行修改;记录执行目标1、2所得的结果;完成练习1(Exercises1)中的内容。
3、运行程序2,记录执行结果;思考:若要问目标2、3、4时,如何来修改程序(选做);完成练习2(Exercises2)中的内容。
4、运行程序3、4,记录执行结果;理解程序中普通变量和匿名变量的使用方法。
5、运行程序5,记录执行结果;执行目标2、3并记录其结果;理解复合目标(合取和析取)的表示方法。
6、自己编写一个简单的Prolog程序。
五、附录程序2:predicatescan_buy(symbol,symbol) - nondeterm (o,o) person(symbol) - nondeterm (o)car(symbol) - nondeterm (o)likes(symbol,symbol) - nondeterm (i,i)for_sale(symbol) - nondeterm (i)clausescan_buy(X,Y):-person(X),car(Y),likes(X,Y),for_sale(Y).person(kelly).person(judy).person(ellen).person(mark).car(lemon).car(hot_rod).likes(kelly, hot_rod).likes(judy, pizza).likes(ellen, tennis).likes(mark, tennis).for_sale(pizza).for_sale(lemon).for_sale(hot_rod).goalcan_buy(Who,What).%can_buy(judy, What). %目标2%can_buy(kelly, What). %目标3%can_buy(Who, hot_rod). %目标4程序5:predicatescar(symbol,long,integer,symbol,long) - nondeterm (o,o,o,o,i)truck(symbol,long,integer,symbol,long) - nondeterm (o,o,o,o,i)vehicle(symbol,long,integer,symbol,long) - nondeterm (o,o,o,o,i)clausescar(chrysler,130000,3,red,12000).car(ford,90000,4,gray,25000).car(datsun,8000,1,red,30000).truck(ford,80000,6,blue,8000).truck(datsun,50000,5,orange,20000).truck(toyota,25000,2,black,25000).vehicle(Make,Odometer,Age,Color,Price):-car(Make,Odometer,Age,Color,Price);truck(Make,Odometer,Age,Color,Price).goalcar(Make,Odometer,Years_on_road,Body,25000)./*car(Make, Odometer, Years_on_road, Body, Cost),Cost < 25000. */ %目标合取目标2/*car(Make,Odometer,Years_on_road,Body,Cost), Cost<25000 ;truck(Make,Odometer,Years_on_road,Body,Cost), Cost < 20000.*/ %目标析取目标3。
prolog实验报告-周俊雯参考模板
北邮人工智能实验报告prolog班级:2011211307姓名:周俊霞日期:2014-05-111、实验题目:用PROLOG完成以下系统的编写。
給出代码和一个运行实例,辨别云的类型。
低纬度云是那些高度等于或低于6000英尺高的云,包括层云和层积云;中纬度云是高度在6000—20000英尺的云,包括高层云、高积云和乱层云;高纬度云是那些高于20000英尺的云,包括卷云、卷层云和卷积云。
积云和积雨云可以从低到高纬度之间分布;层云、高层云、卷层云、积云和积雨云呈大圆锥状;层积云、高积云、乱层云、卷积云象平滑绵延的被单;卷云有纤细的外观,象一簇簇头发;乱层云和积雨云是含雨云,呈黑灰色。
2、实验要求:编写一个程序辨别云的类型,程序的输入是描述云特征的事实,输出为已辨别的云的类型。
*写出一个运行实例(输入、输出)。
3、源代码:/***************************************************************************** Copyright (c) My CompanyProject: CLOUDFileName: CLOUD3.PROPurpose: No descriptionWritten by: Visual PrologComments:******************************************************************************/ include "cloud.inc"domainsCloud_x,Type,Shape,Color,What = symbolHight = integerfacts% 云,有云的名字,高度,形状,颜色四个属性;cloud(Cloud_x,Hight,Shape,Color)predicatesnondeterm is(Cloud_x,Type)clauses%此处为某个已知的云,有云的名字,高度,形状,颜色四个属性;cloud(cloud_lily,7000,big_cone,blackgray).%判断某云是否为~~云;如is(Cloud_x,cengyun)判断某云是否为层云is(Cloud_x,cengyun):-cloud(Cloud_x,Hight,Shape,Color),Hight<=6000,Shape="big_cone", Color="white".is(Cloud_x,cengjiyun):-cloud(Cloud_x,Hight,Shape,Color),Hight<=6000,Shape="sheets",C olor="white".is(Cloud_x,gaocengyun):-cloud(Cloud_x,Hight,Shape,Color),Hight>=6000,Hight<=20000, Shape="big_cone",Color="white".is(Cloud_x,gaojiyun):-cloud(Cloud_x,Hight,Shape,Color),Hight>=6000,Hight<=20000,Sha pe="sheets",Color="white".is(Cloud_x,luancengyun):-cloud(Cloud_x,Hight,Shape,Color),Hight>=6000,Hight<=20000 ,Shape="sheets",Color="blackgray".is(Cloud_x,juanyun):-cloud(Cloud_x,Hight,Shape,Color),Hight>20000,Shape="hair",Color ="white".is(Cloud_x,juancengyun):-cloud(Cloud_x,Hight,Shape,Color),Hight>20000,Shape="big_co ne",Color="white".is(Cloud_x,juanjiyun):-cloud(Cloud_x,Hight,Shape,Color),Hight>20000,Shape="sheets",C olor="white".is(Cloud_x,jiyun):-cloud(Cloud_x,_,Shape,Color),Shape="big_cone",Color="white".is(Cloud_x,jiyuyun):-cloud(Cloud_x,_,big_cone,blackgray).goalwrite("input the name,hight(0~200000),the shape(big_cone,or sheets,or hair),and the color(blackgray or white) of your cloud"),nl,write("input the name"),nl,readln(Cloud_x),write("name:",Cloud_x),nl,write("input the hight"),nl,readint(Hight),write("hight:",Hight),nl,write("input the shape"),nl,readln(Shape),write("shape:",Shape),nl,write("input the color"),nl,readln(Color),write("color:",Color),nl,assertz(cloud(Cloud_x,Hight,Shape,Color)),is(Cloud_x,What).4、运行实例:其中,云的名字,如lily高度如7000形状如big_cone形状如blackgray根据提示每次输入一个属性然后得到运行结果5、搜索规则:PROLOG自动搜索机制为满足一目标,从知识库顶起以遍历方式逐一匹配。
实验1 Visual Prolog入门(1)
Visual Prolog语言简介Prolog语言是人工智能与专家系统领域最著名的逻辑程序设计语言。
Visual Prolog 意指可视化逻辑程序设计语言,是基于Prolog语言的可视化集成开发环境,是Prolog开发中心(PDC)最新推出的基于Windows环境的智能化编程工具,其语言特性符合相应的国际标准ISO/IEC 13211-1:1995。
目前,Visual Prolog在美国、西欧、日本、加拿大、澳大利亚等发达国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。
预计短时期内,在国际上已经十分流行的最新版本的可视化逻辑程序设计语言Visual Prolog将会在我国广泛流行开来,并将迅速成为我国研究和开发智能化应用的最重要的工具。
Visual Prolog具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等强大功能。
它包含构建大型应用程序所需要的一切特性:图形开发环境、编译器、连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。
Visual Prolog包含一个大型库,捆绑了范围广阔的API函数:包括Windows GUI函数族、ODBC/OCI数据库函数族和Internet函数族(socket、ftp、http、cgi等)。
这个开发环境全部使用Visual Prolog语言写成,而且包含对话框、菜单、工具栏等若干编码专家和图形编辑器。
Visual Prolog支持Windows 3.x/95/98/Me/NT/2000/XP、OS/2和文本方式下的DOS、Linux和SCO UNIX。
Visual Prolog非常适合于专家系统、规划和其它AI相关问题的求解,是智能程序设计语言中具有代表性且应用较多的一种语言。
由于这种语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用。
王通prolog教学实习报告
天津农学院计算机科学与信息工程系《Prolog语言》教学实习报告实习名称: Prolog程序的设计与开发专业班级: 09级软件工程2班学号: 0908054204姓名:王通指导教师:马国强成绩:2012年8月目录1 实习内容 (1)2 实习目的 (1)3 实习设计介绍 (1)3.1 设计名称 (1)3.2 设计目标 (1)3.3 地图填色问题 (1)3.4 画一棵树 (5)4 总结与体会 (8)1 实习内容解决两个实际问题,地图填色问题、用Prolog程序画出一棵树,通过实验进行验证并上机调试运行,写出实习报告。
2 实习目的通过本次教学实习,加深对prolog软件的使用与应用,并熟悉prolog语言,将某些问题用prolog程序得以实现,体会该程序的独特之处。
对所学专业知识进一步消化、理解并系统化,锻炼和提高综合运用所学知识解决实际问题的能力。
3 实习设计介绍3.1 设计名称Prolog程序的设计与开发3.2 设计目标书写代码并运行程序得出预期结果。
3.3 地图填色问题3.3.1 概述人人都熟悉地图,可是绘制一张普通的政区图,至少需要几种颜色,才能把相邻的政区或区域通过不同的颜色区分开来,就未必是一个简单的问题了。
这个地图着色问题,是一个著名的数学难题。
大家不妨用一张中国政区图来试一试,无论从哪里开始着色,至少都要用上四种颜色,才能把所有省份都区别开来。
所以,很早的时候就有数学家猜想:"任何地图的着色,只需四种颜色就足够了。
"这就是"四色问题"这个名称的由来。
3.3.2 实验步骤1.创建一个console控制台程序2.建立之后,Bulid/Bulid一下3.修改main.pro3.3.3 Prolog代码implement mainopen core,stdiodomainscolors=bule;yellow;red;green.neighbors=nb(colors,colors).map=neighbors*.class predicatesaMap:(map) nondeterm anyFlow.test:(map) procedure anyFlow. generateColor:(colors) multi(o).clausesclassInfo("main","fourcolors").generateColor(R):-R=bule;R=yellow;R=green;R=red;aMap([]).aMap([X|Xs]):-X=nb(C1,C2),not(C1=C2),aMap(Xs).class factsn:integer:=0clausestest(L):-n:=0generateColor(A),generateColor(B),generateColor(C),generateColor(D),generateColor(E),generateColor(F),L=[nb(A,B),nb(A,C),nb(A,E),nb(A,F),nb(B,C),nb(B,D),nb(B,E),nb(B,F),nb(C,D),nb(C,F),nb(C,F)].n:=n+1,aMap(L) ,!;L=[].run():-console::init(),test(L),stdio::write("\n",n,"\n",L),_=stdio::readline().end implement maingoalmain Exe::run(main::run).3.3.4 运行结果3.3.5 变种问题我们可以修改程序,看看到底有多少种填色方案。
prolog实验报告小结
prolog实验报告小结Prolog实验报告小结引言:Prolog(Programming in Logic)是一种基于逻辑推理的编程语言,它的独特之处在于它的编程方式与传统的命令式编程语言有很大的不同。
在这次的实验中,我们学习了Prolog的基本语法和使用方法,并通过实际的编程实践来加深对Prolog的理解。
一、Prolog的基本语法和特点Prolog的基本语法非常简洁,它由一系列的事实(Facts)和规则(Rules)组成。
事实是关于某个对象的描述,而规则是通过逻辑推理来得出结论的一种方式。
Prolog的特点之一是它采用了自动回溯的机制,这使得我们可以通过不断地尝试不同的规则来解决问题。
二、实验过程及结果在实验中,我们首先学习了如何定义事实和规则。
通过定义一系列的事实和规则,我们可以让Prolog来进行逻辑推理。
例如,我们可以定义一个事实“父亲(张三, 李四)”和规则“祖父(X, Y) :- 父亲(X, Z), 父亲(Z, Y)”来推导出“祖父(张三, 小明)”这个结论。
在实验中,我们还学习了如何使用Prolog的查询功能。
通过向Prolog提出一个查询,我们可以得到满足查询条件的解。
例如,我们可以查询“祖父(张三, 小明)”是否为真,如果是真,则Prolog会返回“是”,否则返回“否”。
在实验过程中,我们遇到了一些困难和挑战。
由于Prolog的编程方式与我们熟悉的命令式编程语言有很大的不同,因此需要我们转变思维方式来解决问题。
另外,由于Prolog采用了自动回溯的机制,有时候会出现无限循环的情况,需要我们仔细调试代码。
经过一段时间的学习和实践,我们逐渐掌握了Prolog的基本语法和使用方法,并且成功地完成了实验任务。
通过这次实验,我们深刻地认识到了Prolog作为一种基于逻辑推理的编程语言的独特魅力和应用价值。
三、实验心得和收获通过这次实验,我对Prolog这种基于逻辑推理的编程语言有了更深入的了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*******大学
实验报告|
|
实验名称PROLOG语言练习与编程上机实验
课程名称人工智能及应用
|
|
专业班级:*******学生姓名:******
学号:*******成绩:
指导教师:*******实验日期:
一、实验目的及要求
1、熟悉并掌握prolog的编程环境、prolog语言的回溯、递归技术和表处理技
术;
2、运用prolog及其相关技术,编写并调试求解农夫过河和模式搜索问题的程
序。
要求实验报告中包括:程序及其注释和说明、程序运行结果。
二、所用仪器、设备
PC台式机和prolog编译软件
三、实验原理
1、prolog本身自带推理机,其回溯、递归技术和表处理技术可简化复杂问
题求解。
2、prolog的跟踪、设断点对于调试程序是非常有用的。
四、求解的问题与程序
农夫过河问题
opposite(s,n).
opposite(n,s).
safe_goat(X,_,X,_).
safe_cabbage(X,_,_,X).
safe_goat(F,X,Y,_):-opposite(X,Y).
safe_cabbage(F,_,X,Y):-opposite(X,Y).
is_peaceful(F,W,G,C):-safe_goat(F,W,G,C),safe_cabbage(F,W,G,C).
transform(location(X,W,G,C),location(Y,W,G,C)):-opposite(X,Y). transform(location(X,X,G,C),location(Y,Y,G,C)):-opposite(X,Y). transform(location(X,W,X,C),location(Y,W,Y,C)):-opposite(X,Y). transform(location(X,W,G,X),location(Y,W,G,Y)):-opposite(X,Y).
member(X,[X|_]).
member(X,[_|T]):-member(X,T).
legal_states(location(F0,W0,G0,C0),location(F,W,G,C),States,X):-
transform(location(F0,W0,G0,C0),location(F1,W1,G1,C1)),
is_peaceful(F1,W1,G1,C1),
not(member(location(F1,W1,G1,C1),States)),!,
legal_states(location(F1,W1,G1,C1),location(F,W,G,C),[location(F1,W1,G1, C1)|States],X).
legal_states(location(F,W,G,C),location(F,W,G,C),L,L).
write_state(location(X,W,G,C),location(Y,W,G,C)):-!,write("The farmer crosses the river himself"),nl.
write_state(location(X,X,G,C),location(Y,Y,G,C)):-!,write("The farmer crosses the river with the wolf"),nl.
write_state(location(X,W,X,C),location(Y,W,Y,C)):-!,write("The farmer crosses the river with the goat"),nl.
write_state(location(X,W,G,X),location(Y,W,G,Y)):-!,write("The farmer crosses the river with the cabbage"),nl.
write_actions([]).
write_actions([H1,H2|T]):-write_state(H1,H2),write_actions([H2|T]).
boat(location(F0,W0,G0,C0),location(F,W,G,C)):-
legal_states(location(F0,W0,G0,C0),location(F,W,G,C),[location(F0,W0,G0, C0)],X),write_actions(X).
改进模式搜索算法
function pattern_search(current_goal)
Begin
If current_goal是closed中的成员
Then return FAIL
Else把current_goal加入到closed中;
While在数据库中还有供合一的事实或规则do
Begin
Case
Current_goal与事实合一:
return合一的置换集;
Current_goal包含非(—|P):
Begin
对P调用pattern_search;
If pattern_search返回FAIL
Then return{};
Else return FAIL;
End;
Current_goal是一个合取式(P1^P2^……^Pn):
Begin
For每个合取项do
Begin
对每个合取项调用pattern_search;
If pattern_search返回FAIL
Then return FAIL;
Else对其他的合取项应用置换;
End;
If对于所有的合取项,pattern_search都返回SUCCESS
Then return合一的复合;
Else return FAIL;
End;
Current_goal是一个析取式(P1VP2V……VPn):
Begin
Repeat每个析取项disjunct
对disjunct调用pattern_search;
Until不再有析取项或SUCCESS;
If pattern_search返回SUCCESS
Then return置换;
Else return FAIL;
End;
Current_goal与规则的结论合一(p在p<—q中):
Begin
对前提(q)应用目标的合一置换;
对前提调用pattern_search;
If pattern_search返回SUCCESS
Then return p和q的置换的复合;
Else return FAIL;
End;
End;%end case
End;%end while
Return FAIL;
End;
五、讨论与结论
Prolog语言是第一次接触。
在做实验时,我切切实实的感受到了自己的严重不足。
虽然能够看懂程序,但要自己动手写时一点思路都没有,不知从何处下手。
按着以前的学习的内容,本着把事实说清楚的思路,我调试了一个农夫过河的问题。
在这个过程中才发现其中的困难之处——逻辑性。
虽然把一些事实陈述清楚了,但仍然难以克服其中内在的逻辑关系,以至于在调试过程中出现了无限死循环这样的错误。
在最后调试农夫过河问题时,仍存在一些错误:只输出了一个结果,而且这个结果也并不是完全正确。
也许是接触prolog时间太短,还不能完全的掌握prolog语言的调试方法。
因此我还需要好好的学习prolog语言。