丁浩轩prolog教学实习报告.doc_第1页
丁浩轩prolog教学实习报告.doc_第2页
丁浩轩prolog教学实习报告.doc_第3页
丁浩轩prolog教学实习报告.doc_第4页
丁浩轩prolog教学实习报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

天津农学院计算机科学与信息工程系Prolog语言教学实习报告实习名称: Prolog程序的设计与开发 专业班级: 09级软件工程1班 学 号: 0908054213 姓 名: 丁浩轩 指导教师: 马国强 成 绩: 2012年8月目 录1 开发内容12 开发目的13 程序设计介绍13.1 设计名称13.2 设计目标13.3 地图填色问题13.4 画一棵树64 总结与体会10101 开发内容解决两个问题,地图填色问题、用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.修改 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. 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 facts n:integer:=0clausestest(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),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 变种问题我们可以修改程序,看看到底有多少种填色方案。修改程序后代码如下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).generateColor(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),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:run).运行截图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添加代码在taskW4.在draw.cl 添加代码5.先Build/Build 然后编辑canvas.frm,在Events对话框中添加onPaint为paintResponder的事件处理谓词,双击后在里添加代码。6.运行程序3.4.3 Prolog代码taskWpredicates onFileNew:window:menuItemListener. clauses onFileNew(S,_MenuTag):- X=canvas:new(S),X :show().draw.clclass draw open core,vpiDomains predicates classInfo:core:classInfo. tree:(windowHandle). end class implement 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,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):- derive(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(Win,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=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). tree(Win):- grammar(Commands), iter(5,Commands,C), Facing=-pi/2, Point=pnt(100,250), move(Win,Point,Facing,C). end imple

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论