Rekursive Drachenkurve

Die Drachenkurve kann mit der Hilfe eines Lindenmayer-Systems konstruiert werden oder mit einer rekursiven Prozedur und der Schildkröten-Grafik. Dafür wird zunächst eine Spezialisierung der Schildkröten-Klasse erzeugt.

(defclass dragon-turtle (turtle))

Diese erhält eine rekursive Methode zum Zeichnen der Drachenkurve.

(defmethod draw-dragon-curve ((this dragon-turtle) n)
  t
  (cond
    ((= n 0)
      (forward this 10))
    ((> n 0)
       (progn
         (draw-dragon-curve this (- n 1))
         (right this 90)
         (draw-dragon-curve this (- 1 n))))
    (t
      (progn
        (draw-dragon-curve this (- 0 1 n))
        (left this 90)
        (draw-dragon-curve this (+ 1 n))))))

Die Methode wird innerhalb einer Funktion mit einer Instanz der spezialisierten Klasse aufgerufen. Die Funktion liefert als Resulat das erzeugte Bild.

(defproc dragon-curve (n)
  (let
    ((turtle (new dragon-turtle)))
    (progn
      (pen-down turtle)
      (draw-dragon-curve turtle n)
      (get-picture turtle))))


Quelle
Adele Goldberg, David Robson
"Smalltalk-80 The Language"
Seiten 372f


dragon-curve2.sheet.xml