何训松prolog.docx

上传人:b****1 文档编号:2344450 上传时间:2023-05-03 格式:DOCX 页数:12 大小:93.81KB
下载 相关 举报
何训松prolog.docx_第1页
第1页 / 共12页
何训松prolog.docx_第2页
第2页 / 共12页
何训松prolog.docx_第3页
第3页 / 共12页
何训松prolog.docx_第4页
第4页 / 共12页
何训松prolog.docx_第5页
第5页 / 共12页
何训松prolog.docx_第6页
第6页 / 共12页
何训松prolog.docx_第7页
第7页 / 共12页
何训松prolog.docx_第8页
第8页 / 共12页
何训松prolog.docx_第9页
第9页 / 共12页
何训松prolog.docx_第10页
第10页 / 共12页
何训松prolog.docx_第11页
第11页 / 共12页
何训松prolog.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

何训松prolog.docx

《何训松prolog.docx》由会员分享,可在线阅读,更多相关《何训松prolog.docx(12页珍藏版)》请在冰点文库上搜索。

何训松prolog.docx

何训松prolog

 

天津农学院

计算机科学与信息工程系

《Prolog语言》

教学实习报告

 

实习名称:

Prolog程序的设计与开发

专业班级:

09级软件工程2班

学号:

0908054223

姓名:

何训松

指导教师:

马国强

成绩:

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语言有了深一步的了解。

对所学专业知识进一步消化、理解并系统化,锻炼和提高综合运用所学知识解决实际问题的能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2