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>

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)
        (send turtle pen-erase!)
        (begin          
          (send turtle forward! length)
          (send turtle right! angle)
          (random-way (+ 5 (random angle))(+ 5 (random length)) (- n 1) turtle)
          (sleep-for-a-while 0.01)
          (send turtle left! angle)
          (send turtle backward! length)))))

(random-way 360 20 50 turtle4)
</eval>
<canvas></canvas>