Scheme Turtle 2
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
==Beispiele mit Rekursion==
Die folgenden Prozeduren für Turtles sind typische Lehrbeispiele für Rekursion. Je nach Bedarf werden weitere eingebaute Sprachelemente der Scheme-Turtle-Geometrie eingeführt.
===Klassischer Binärbaum mit jeweils halbierter Astlänge===
Ein Baum mit Stammlänge <tt>side</tt> ist ein Gebilde, das aus einem Stamm der Länge <tt>side</tt> besteht, an dessen Ende links im Winkel von 45 Grad ein Baum der halben Stammlänge, also <tt>side/2</tt>, anschließt, und an dessen Ende rechts im Winkel von -45 Grad ein Baum der halben Stammlänge, also <tt>side/2</tt>, anschließt. Ist die Stammlänge kleiner als z.B. 20, also <tt>side < 20</tt>, dann besteht der Baum aus nichts.
Die jeweils ansetzenden Teilbäume haben gerade die halbe Stammlänge gegenüber ihren Vorgängern. Die Stämme benachbarter Binärbäume bilden einen Winkel von 90 Grad. Außerdem wird die Aststärke der Rekursionstiefe angepasst wird. Wenn eine Stammlänge von 20 Einheiten unterschritten wird, endet die Baum-Verzweigung.
{|width="100%"
|-valign="top"
|width=600|<canvas></canvas>||<code id="4b4062e1c47c4">
(define tree
(lambda(side turtle)
(cond
((< side 20) #t)
(else
(penwidth turtle (+ (/ side 10) 1 ))
(forward turtle side)
(left turtle 45)
(tree (/ side 2) turtle)
(right turtle 90)
(tree (/ side 2) turtle)
(left turtle 45)
(backward turtle side)))))
</code>
<eval id="4b4062e1c4f96">
(clear canvas)
(move turtle 200 190)
(tree 100 turtle)
</eval>
|}
===Befehlsliste===
{| border='1px'
|+ Die folgende Tabelle enthält alle Befehle, die eine Turtle versteht.
! Befehl !! Beschreibung
|-
| home
| setzt die Turtle auf die Mitte der Zeichenfläche
|-
| move turtle x y
| setzt die Turtle auf den Punkt (x,y) der Zeichenfläche (Koordinatenursprung: linke obere Ecke)
|-
| forward turtle x
| lässt die Turtle x Schritte nach vorn gehen
|-
| backward turtle x
| lässt die Turtle x Schritte nach hinten gehen
|-
| pendown turtle
| setzt den stift ab, sodass Turtle-Bewegungen eine Spur hinterlassen (Standard)
|-
| penup turtle
| nimmt den stift hoch, sodass Turtle-Bewegungen keine Spur hinterlassen
|-
| penwidth turtle x
| Setzt die Stärke des Stiftes auf x
|-
| pencolor turtle r g b
| setzt die Farbe des Stiftes (Rot-Gelb-Grün-Werte im Bereich 0-255)
|-
| right turtle x
| dreht die Turtle um x Grad nach rechts
|-
| left turtle x
| dreht die Turtle um x Grad nach links
|-
| hide turtle
| blendet die Turtle aus
|-
| show turtle
| blendet die Turtle ein
|-
| clone turtle
| clont die Turtle in der Aktuellen Position
|-
| panerase turtle
| Die Turtle löscht die Markierungen, denen sie begegnet (wie ein Radiergummi).
|-
| clear canvas
| löscht die Zeichenfläche
|-
|}
===Beispiel===
Setzen Sie sich mit dem folgenden Beispiel auseinander und modifizieren Sie die Prozedur <tt>quad</tt>.
{|width="100%"
|-valign="top"
|width=600|<canvas width=600 height=300></canvas>||<code id="4ae30126a36cb">
(define quad
(lambda (turtle s)
(begin
(penwidth turtle 10)
(pencolor turtle 255 0 0)
(forward turtle s)
(right turtle 90)
(forward turtle s)
(right turtle 90)
(forward turtle s)
(right turtle 90)
(forward turtle s)
(right turtle 90))))
</code>
<eval id="4ae30126a3ec6">
(clear canvas1)
(home turtle1)
(quad turtle1 50)</eval>
|}
[[Scheme Turtle 3]]