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),
9
move(Win,Point,Facing,C). end implement draw canvas.pro predicates
onPaint:drawWindow::paintResponder. clauses
onPaint(S,_Rectangle,_GDIObject):- draw::tree(S:getVPIWindow()). 3.4.4 结果截图
4 总结与体会
通过本次开发实践,加深了对prolog程序编程的熟练程度,对prolog语言有了深一步的了解。对所学专业知识进一步消化、理解并系统化,锻炼和提高综合运用所学知识解决实际问题的能力。
10