Scheme Turtle 2

Aus ProgrammingWiki
Archivierte Version vom 2008-12-13T17:39:04+00:00. Aktuelle Version

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)

Ihr Browser unterstützt Canvas nicht.


<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)

Ihr Browser unterstützt Canvas nicht.

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)

Ihr Browser unterstützt Canvas nicht.

(define t (clone turtle)) (hide t) (forward t 50) (right t 90) (forward t 50) (show t) (setangleto t turtle)