Dr. Scheme Problem

  • Ich hab jetzt folgendes geschrieben;


    (turtles)
    (define (turn1)
    (turn 270))
    (turn 90)
    (draw 100)
    (turn1)
    (draw 100)
    (turn1)
    (draw 100)
    (turn1)
    (draw 95)
    (turn1)
    (draw 95)
    (turn1)
    (draw 90)
    (turn1)
    (draw 90)
    (turn1)
    (draw 85)
    (turn1)
    (draw 85)
    (turn1)
    (draw 80)
    (turn1)
    (draw 80)
    (turn1)
    (draw 75)
    (turn1)
    (draw 75)
    (turn1)
    (draw 70)
    (turn1)
    (draw 70)
    (turn1)
    (draw 65)
    (turn1)
    (draw 65)
    (turn1)
    (draw 60)
    (turn1)
    (draw 60)
    (turn1)
    (draw 55)
    (turn1)
    (draw 55)
    (turn1)
    (draw 50)
    (turn1)
    (draw 50)
    (turn1)
    (draw 45)
    (turn1)
    (draw 45)
    (turn1)
    (draw 40)
    (turn1)
    (draw 40)
    (turn1)
    (draw 35)
    (turn1)
    (draw 35)
    (turn1)
    (draw 30)
    (turn1)
    (draw 30)
    (turn1)
    (draw 25)
    (turn1)
    (draw 25)
    (turn1)
    (draw 20)
    (turn1)
    (draw 20)
    (turn1)
    (draw 15)
    (turn1)
    (draw 15)
    (turn1)
    (draw 10)
    (turn1)
    (draw 10)
    (turn1)
    (draw 5)
    (turn1)
    (draw 5)
    (turn1)

    Das ist sone Art Schnecke, die nach innen geht, nur ist es eben rechteckig. Also Strecke 100 Pixel, 90° Drehung, wieder 100 Pixel, 90° Drehung, Jetzt aber nur noch 95 pixel, wieder 90° Drehung,...

    Die Strecke nimmt dabei immer um 5 pixel ab.

    Wie kann ich das jetzt zusammenfassen mit <cond> <else> <let> oder was weis sich, denn so will mein Lehrer das sicher nicht sehen.

    Hiiiiiiiiilfe! ;)

  • Zitat von retrogamer2k6

    Ich hab jetzt folgendes geschrieben;

    Den Grostzeil dieses Codes kannst Du mal wie folgt generieren:

    Code
    (defun make-seq (n sofar)
      (if (> n 100)
          sofar
        (make-seq (+ n 5) `((draw ,n) (turn1)
                            (draw ,n) (turn1)
                            (draw ,n) (turn1)
                            ,@sofar))))

    (ist Emacs-Lisp, sehr aehnlich Scheme) (make-seq 5 nil) liefert jetzt:

    ((draw 100) (turn1) (draw 100) (turn1) (draw 100) (turn1) (draw 95) (turn1) (draw 95) (turn1) (draw 95) (turn1) (draw 90) (turn1) (draw 90) (turn1) (draw 90) (turn1) (draw 85) (turn1) (draw 85) (turn1) (draw 85) (turn1) (draw 80) (turn1) (draw 80) (turn1) (draw 80) (turn1) (draw 75) (turn1) (draw 75) (turn1) (draw 75) (turn1) (draw 70) (turn1) (draw 70) (turn1) (draw 70) (turn1) (draw 65) (turn1) (draw 65) (turn1) (draw 65) (turn1) (draw 60) (turn1) (draw 60) (turn1) (draw 60) (turn1) (draw 55) (turn1) (draw 55) (turn1) (draw 55) (turn1) (draw 50) (turn1) (draw 50) (turn1) (draw 50) (turn1) (draw 45) (turn1) (draw 45) (turn1) (draw 45) (turn1) (draw 40) (turn1) (draw 40) (turn1) (draw 40) (turn1) (draw 35) (turn1) (draw 35) (turn1) (draw 35) (turn1) (draw 30) (turn1) (draw 30) (turn1) (draw 30) (turn1) (draw 25) (turn1) (draw 25) (turn1) (draw 25) (turn1) (draw 20) (turn1) (draw 20) (turn1) (draw 20) (turn1) (draw 15) (turn1) (draw 15) (turn1) (draw 15) (turn1) (draw 10) (turn1) (draw 10) (turn1) (draw 10) (turn1) (draw 5) (turn1) (draw 5) (turn1) (draw 5) (turn1))

    Ein bisschen musst Du jetzt noch dazubauen. Es ist wohl auch klar, wie Du von dieser Erzeugung zur Ausfuehrung kommst. Entweder ueber Makro, eval, oder anstatt den Code (symbolisch) aufzubauen direkt die entsprechenden Funktionen aufrufen.

  • Ich hab´s jetzt (mit Hilfe einiger kollegen) herausgefunden:

    (turtles)
    (define (Pyramide seite)
    (cond ((< seite 5))
    (else(draw seite)
    (turn 90)
    (Pyramide (- seite 5)))))

    Das ist das obere zusammengefasst :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!