Scheme Turtle 3

Aus ProgrammingWiki
Archivierte Version vom 2008-12-13T17:52:28+00:00. Aktuelle Version

Klassischer Binärbaum mit geklonten Turtles

In diesem Beispiel entsteht der gleiche Baum wie im vorhergehenden. Allerdings wird die jeweils aktive Turtle an jeder Verzweigungsstelle geklont. Dies unterstützt die Idee nebenläufiger Baumkonstruktion durch zeitlich parallel arbeitender Turtles.

<eval> (clear canvas) (move turtle 200 190)</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) (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)