Scheme Turtle
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
<eval>
(clear canvas)
(move turtle 100 100)
(penwidth turtle 5)
(pencolor turtle 255 0 0)
(forward turtle 50)
(right turtle 90)
(forward turtle 50)
(right turtle 90)
(pencolor turtle 0 0 255)
(forward turtle 50)
(right turtle 90)
(forward turtle 50)
(define t (clone turtle)) (forward t 50)
</eval>
<canvas></canvas>
<eval>
(clear canvas2)
(move turtle2 200 200)
(define tree
(lambda(side)
(cond [(< side 2) #t]
[else
(penwidth turtle2 (/ side 10))
(forward turtle2 side)
(left turtle2 45)
(tree(/ side 2))
(right turtle2 90)
(tree(/ side 2))
(left turtle2 45)
(backward turtle2 side)])))
(tree 100)
</eval>
<canvas></canvas>
<eval>
(clear canvas3)
(move turtle3 200 200)
(define tree
(lambda(side)
(cond [(< side 2) #t]
[else
(penwidth turtle3 (/ side 10))
(forward turtle3 side)
(left turtle3 45)
(tree(/ side 2))
(right turtle3 90)
(tree(/ side 2))
(left turtle3 45)
(backward turtle3 side)])))
(tree 100)
</eval>
<canvas></canvas>
Die folgende Prozedure <tt>tree</tt> verwendet einen Parameter für die ''turtle''.
<eval>
(clear canvas3)
(move turtle3 200 200)
(define tree
(lambda(side turtle)
(cond
((< side 2) #t)
(else
(penwidth turtle (/ side 10))
(forward turtle side)
(left turtle 45)
(tree (/ side 2) (clone turtle))
(right turtle 90)
(tree (/ side 2) (clone turtle))
(left turtle 45)
(backward turtle side)))))
(tree 100 turtle3)
</eval>
<canvas></canvas>
Zur Erforschung echter Rekursion verwenden wir die Prozedur <tt>random-walk</tt>.
<eval>
(clear canvas4)
(move turtle4 200 200)
(define random-walk
(lambda (angle length n turtle)
(if (= n 0)
(penerase turtle)
(begin
(forward turtle length)
(right turtle angle)
(random-way (+ 5 (random angle))(+ 5 (random length)) (- n 1) turtle)
;(sleep-for-a-while 0.01)
(left turtle angle)
(backward turtle length)))))
(random-way 360 20 50 turtle4)
</eval>
<canvas></canvas>