Scheme Turtle
Aus ProgrammingWiki
Archivierte Version vom 2008-12-06T12:07:35+00:00. Aktuelle Version
<eval> (clear canvas) (move turtle 100 100)</eval>
(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> (clear canvas2) (move turtle2 200 200)</eval>
(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> (clear canvas3) (move turtle3 200 200)</eval>
(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)
Zur Erforschung echter Rekursion verwenden wir die Prozedur random-walk.
<eval> (clear canvas4) (move turtle4 200 200)</eval>
(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)