3.3.5 变种问题
我们可以修改程序,看看到底有多少种填色方案。修改程序后代码如下
implement main open core,stdio domains
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). clauses
classInfo(\
generateColor(R):- R=blue; R=yellow; R=green;
4
R=red. aMap([]). aMap([X|Xs]):- X=nb(C1,C2), not(C1=C2), aMap(Xs).
class facts 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),
5
k:=k+1,
N=string::format(\
stdio::write(\ n:=0, fail. run():-
_=stdio::readline(). end implement main goal
mainExe::run(main::run). 运行截图
3.4 画一棵树 3.4.1 概述
本程序画树的形态是步长4.0,倾角0.1745329,向上画一段,然后画一个分支,再向上画一段,另外一个方向画分支,改变方向,画一段。 3.4.2 实验步骤
1.创建一个GUI Project Lsys 2.再其根目录下创建包 aristid
6
3.在aristid下创建Form “Canvas”,另外创建一个class“draw”,并不选择:Create Objects”。使File/New可用,用 Code Expert添加代码在taskWindow.pro
4.在draw.cl draw.pro 添加代码
5.先Build/Build 然后编辑canvas.frm,在Events对话框中添加onPaint为paintResponder的事件处理谓词,双击后在canvas.pro里添加代码。
6.运行程序 3.4.3 Prolog代码
taskWindow.pro predicates
onFileNew:window::menuItemListener. clauses
onFileNew(S,_MenuTag):-
X=canvas::new(S),X ::show(). draw.cl class draw
open core,vpiDomains predicates
classInfo:core::classInfo. tree:(windowHandle). end class draw
draw.pro implement draw
open core,vpiDomains,vpi,math clauses
classInfo(\domains
command=t(commandList);f(integer); r(integer);m.
commandList=command*.
7
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),
8