王通prolog教学实习报告.docx
- 文档编号:29376903
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:12
- 大小:93.70KB
王通prolog教学实习报告.docx
《王通prolog教学实习报告.docx》由会员分享,可在线阅读,更多相关《王通prolog教学实习报告.docx(12页珍藏版)》请在冰豆网上搜索。
王通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.pro
3.3.3Prolog代码
implementmain
opencore,stdio
domains
colors=bule;yellow;red;green.
neighbors=nb(colors,colors).
map=neighbors*.
classpredicates
aMap:
(map)nondetermanyFlow.
test:
(map)procedureanyFlow.
generateColor:
(colors)multi(o).
clauses
classInfo("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).
classfacts
n:
integer:
=0
clauses
test(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().
endimplementmain
goal
mainExe:
:
run(main:
:
run).
3.3.4运行结果
3.3.5变种问题
我们可以修改程序,看看到底有多少种填色方案。
修改程序后代码如下
implementmain
opencore,stdio
domains
colors=blue;yellow;red;green.
neighbors=nb(colors,colors).
map=neighbors*.
classpredicates
aMap:
(map)nondetermanyFlow.
test:
(map)nondetermanyFlow.%multianyFlow.%procedureanyFlow.
generateColor:
(colors)multi(o).
clauses
classInfo("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).
classfacts
n:
integer:
=0.
k:
integer:
=0.
clauses
test(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("\n\n",N,"\n",L),%),stdio:
nl,
n:
=0,
fail.
run():
-
_=stdio:
:
readline().
endimplementmain
goal
mainExe:
:
run(main:
:
run).
运行截图
3.4画一棵树
3.4.1概述
本程序画树的形态是步长4.0,倾角0.1745329,向上画一段,然后画一个分支,再向上画一段,另外一个方向画分支,改变方向,画一段。
3.4.2实验步骤
1.创建一个GUIProjectLsys
2.再其根目录下创建包aristid
3.在aristid下创建Form“Canvas”,另外创建一个class“draw”,并不选择:
CreateObjects”。
使File/New可用,用CodeExpert添加代码在taskWindow.pro
4.在draw.cldraw.pro添加代码
5.先Build/Build然后编辑canvas.frm,在Events对话框中添加onPaint为paintResponder的事件处理谓词,双击后在canvas.pro里添加代码。
6.运行程序
3.4.3Prolog代码
taskWindow.pro
predicates
onFileNew:
window:
:
menuItemListener.
clauses
onFileNew(S,_MenuTag):
-
X=canvas:
:
new(S),X:
:
show().
draw.cl
classdraw
opencore,vpiDomains
predicates
classInfo:
core:
:
classInfo.
tree:
(windowHandle).
endclassdraw
draw.pro
implementdraw
opencore,vpiDomains,vpi,math
clauses
classInfo("plotter/draw","1.0").
domains
command=t(commandList);f(integer);
r(integer);m.
commandList=command*.
classfacts
pos:
(realDelta,realTurn)single.
grammar:
(commandList)single.
classpredicates
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).
endimplementdraw
canvas.pro
predicates
onPaint:
drawWindow:
:
paintResponder.
clauses
onPaint(S,_Rectangle,_GDIObject):
-
draw:
:
tree(S:
getVPIWindow()).
3.4.4结果截图
4总结与体会
通过本次开发实践,加深了对prolog程序编程的熟练程度,对prolog语言有了深一步的了解。
对所学专业知识进一步消化、理解并系统化,锻炼和提高综合运用所学知识解决实际问题的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 王通 prolog 教学 实习 报告