ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:93.81KB ,
资源ID:12265596      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12265596.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(何训松prolog.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

何训松prolog.docx

1、何训松prolog天津农学院计算机科学与信息工程系Prolog语言教学实习报告实习名称: Prolog程序的设计与开发 专业班级: 09级软件工程2班 学 号: 0908054223 姓 名: 何训松 指导教师: 马国强 成 绩: 2012年8月目 录1 实习内容 12 实习目的 13 实习设计介绍 13.1 设计名称 13.2 设计目标 13.3 地图填色问题 13.4 画一棵树 54 总结与体会 81 实习内容解决地图填色问题、用Prolog程序画出一棵树,通过实验进行验证并上机调试运行,写出实习报告。2 实习目的加深对prolog软件的使用与应用,并熟悉prolog语言,将某些问题用pr

2、olog程序得以实现,体会该程序的独特之处。对所学专业知识进一步消化、理解并系统化,锻炼和提高综合运用所学知识解决实际问题的能力。3 实习设计介绍3.1 设计名称Prolog程序的设计与开发3.2 设计目标书写代码并运行程序得出预期结果。3.3 地图填色问题3.3.1 概述这个地图着色问题,是一个著名的数学难题。大家不妨用一张中国政区图来试一试,无论从哪里开始着色,至少都要用上四种颜色,才能把所有省份都区别开来。所以,很早的时候就有数学家猜想:任何地图的着色,只需四种颜色就足够了。这就是四色问题这个名称的由来。人人都熟悉地图,可是绘制一张普通的政区图,至少需要几种颜色,才能把相邻的政区或区域通

3、过不同的颜色区分开来,就未必是一个简单的问题了。3.3.2 实验步骤 1.创建一个console控制台程序 2.建立之后,Bulid/Bulid一下 3.修改main.pro 3.3.3 Prolog代码implement main open core,stdiodomains colors=bule;yellow;red;green. neighbors=nb(colors,colors). map=neighbors*.class predicates aMap:(map) nondeterm anyFlow. test:(map) procedure anyFlow. generateC

4、olor:(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 facts n:integer:=0clausestest(L):- n:=0 generateColor(A), generateColor(B), generateColor(C), generateColor(D), generateColor(E), g

5、enerateColor(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 变种问题我们可以修改程序,看看到底有多少种填色方案。修改程序后

6、代码如下implement main open core,stdiodomains colors=blue;yellow;red;green. neighbors=nb(colors,colors). map=neighbors*.class predicates aMap:(map) nondeterm anyFlow. test:(map) nondeterm anyFlow.% multi anyFlow. %procedure anyFlow. generateColor:(colors) multi(o).clausesclassInfo(main,fourcolors).gener

7、ateColor(R):- R=blue; R=yellow; R=green; R=red.aMap().aMap(X|Xs):- X=nb(C1,C2), not(C1=C2), aMap(Xs).class facts n :integer :=0. k :integer :=0.clausestest(L):- n:=0, generateColor(A), generateColor(B), generateColor(C), generateColor(D), generateColor(E), generateColor(F), L=nb(A,B),nb(A,C),nb(A,E)

8、,nb(A,F), nb(B,C),nb(B,D),nb(B,E),nb(B,F), nb(C,D),nb(C,F),nb(C,F), %write(n,), n:=n+1, aMap(L). % ,! %;L=. run():- console:init(), k:=0, test(L), k:=k+1, N=string:format(%2 -%3 ,k, n), stdio:write(nn,N,n,L),%),stdio:nl, n:=0, fail. run():- _=stdio:readline().end implement maingoalmainExe:run(main:r

9、un).运行截图3.4 画一棵树3.4.1 概述本程序画树的形态是步长4.0,倾角0.1745329,向上画一段,然后画一个分支,再向上画一段,另外一个方向画分支,改变方向,画一段。3.4.2 实验步骤1.创建一个GUI Project Lsys2.再其根目录下创建包 aristid3.在aristid下创建Form “Canvas”,另外创建一个class“draw”,并不选择:Create Objects”。使File/New可用,用 Code Expert添加代码在taskWindow.pro4.在draw.cl draw.pro 添加代码5.先Build/Build 然后编辑canva

10、s.frm,在Events对话框中添加onPaint为paintResponder的事件处理谓词,双击后在canvas.pro里添加代码。6.运行程序3.4.3 Prolog代码taskWindow.propredicates onFileNew:window:menuItemListener. clauses onFileNew(S,_MenuTag):- X=canvas:new(S),X :show().draw.clclass draw open core,vpiDomains predicates classInfo:core:classInfo. tree:(windowHandl

11、e). end class drawdraw.proimplement draw open core,vpiDomains,vpi,mathclauses classInfo(plotter/draw,1.0).domains command=t(commandList);f(integer); r(integer);m. commandList=command*. class facts pos:(real Delta,real Turn)single. grammar:(commandList) single. class predicates move:(windowHandle,pnt

12、,real,commandList) procedure(i,i,i,i). derive:(commandList,commandList) procedure(i,o). mv:(windowHandle,pnt,real,command,pnt,real) procedure(i,i,i,i,o,o). iter:(integer,commandList,commandList) procedure(i,i,o). clauses pos(4.0,0.1745329). grammar(f(1). iter(0,S,S):-!. iter(I,InTree,OutTree):- deri

13、ve(InTree,S), iter(I-1,S,OutTree). derive (,):-!. derive(f(0)|Rest,f(0),f(0)|S):-!, derive(Rest,S). derive(f(_)|Rest, f(0),t(r(1),f(1),f(0), t(r(-1),f(1),r(1),f(1)|S):-!, derive(Rest,S). derive(t(Branches)|Rest,t(B)|S):-!, derive(Branches,B), derive(Rest,S). derive(X|Rest,X|S):-derive(Rest,S). mv(Wi

14、n,P1,Facing,f(_),P2,Facing):-!, pos(Displacement,_Turn), P1=pnt(X1,Y1), X2=round(X1+Displacement*cos(Facing), Y2=round(Y1+Displacement*sin(Facing), P2=pnt(X2,Y2), drawline(Win,P1,P2). mv(_Win,P1,Facing,m,P2,Facing):-!, pos(Displacement,_Turn), P1=pnt(X1,Y1), X2=round(X1+Displacement*cos(Facing), Y2=

15、round(Y1+Displacement*sin(Facing), P2=pnt(X2,Y2). mv(_Win,P1,Facing,r(Direction),P1,F):-!, pos(_Displacement,Turn), F=Facing+Direction*Turn. mv(Win,P1,Facing,t(B),P1,Facing):- move(Win,P1,Facing,B). move(_Win,_P1,_Facing,):-!. move(Win,P1,Facing,X|Rest):- mv(Win,P1,Facing,X,P,F), move(Win,P,F,Rest).

16、 tree(Win):- grammar(Commands), iter(5,Commands,C), Facing=-pi/2, Point=pnt(100,250), move(Win,Point,Facing,C). end implement drawcanvas.propredicates onPaint:drawWindow:paintResponder. clauses onPaint(S,_Rectangle,_GDIObject):- draw:tree(S:getVPIWindow(). 3.4.4 结果截图4 总结与体会通过本次开发实践,加深了对prolog程序编程的熟练程度,对prolog语言有了深一步的了解。对所学专业知识进一步消化、理解并系统化,锻炼和提高综合运用所学知识解决实际问题的能力。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1