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. Die Stämme benachbarter Binärbäume bilden einen Winkel von 90 Grad. <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)