Scheme Turtle 2
Beispiele mit Rekursion
Die folgenden Prozeduren für Turtles sind typische Lehrbeispiele für Rekursion. Nebenher werden weitere eingebaute Sprachelemente der Scheme-Turtle-Geometrie eingeführt.
Klassischer Binärbaum mit jeweils halbierter Astlänge
Die jeweils ansetzenden Teilbäume haben gerade die halbe Stammlänge gegenüber ihren Vorgängern. Die Stämme benachbarter Binärbäume bilden einen Winkel von 90 Grad. Wenn eine Stammlänge von 20 Einheiten unterschritten wird, endet die Baum-Verzweigung. <eval> (clear canvas) (move turtle 200 200)</eval>
(define tree
(lambda(side turtle)
(cond
((< side 20) #t)
(else
(penwidth turtle (+ (/ side 10) 1 ))
(forward turtle side)
(left turtle 45)
(tree (/ side 2) turtle)
(right turtle 90)
(tree (/ side 2) turtle)
(left turtle 45)
(backward turtle side)))))(tree 100 turtle)
<eval> (clear canvas) (move turtle 200 200)</eval>
(define tree
(lambda(side turtle)
(cond
((< side 2) #t)
(else
(penwidth turtle (+ (/ side 10) 1 ))
(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 turtle)
<eval> (clear canvas) (move turtle 200 200)</eval>
(define tree
(lambda(side winkel)
(cond [(< side 4) #t]
[else
(penwidth turtle (+ (/ side 10) 1 ))
(forward turtle side)
(left turtle winkel)
(tree (/ side 2) winkel)
(left turtle winkel)
(tree (/ side 2) winkel)
(right turtle (* 4 winkel))
(tree (/ side 2) winkel)
(left turtle winkel)
(tree (/ side 2) winkel)
(left turtle winkel)
(backward turtle side)])))(tree 100 25)
Die folgende Prozedure tree verwendet einen Parameter für die turtle.
Zur Erforschung echter Rekursion verwenden wir die Prozedur random-walk.
<eval> (define random</eval>
(random-maker 19768116)) ;; Anfangswert verändern!
(clear canvas4) (move turtle4 200 310) (pencolor turtle4 0 0 200)
(define random-walk
(lambda (angle length n turtle)
(if (= n 0)
;(penerase turtle)
(pencolor turtle4 220 0 0)
(begin
(forward turtle length)
(right turtle angle)
(random-walk (+ 5 (random angle))(+ 5 (random length)) (- n 1) turtle)
;(sleep-for-a-while 0.01)
(left turtle angle)
(backward turtle length)))))(random-walk 360 20 1000 turtle4)
(define t (clone turtle)) (hide t) (forward t 50) (right t 90) (forward t 50) (show t) (setangleto t turtle)