Seite 1 von 3

HA4 7

Verfasst: 14. Nov 2007 19:45
von s!mon
Hallo. Ja es geht mal wieder weiter mit einer neuen Übung :). Sie läuft bei mir schon so weit, bin eigentlich fertig. Das einzige was ich wissen will: Wie muss der Vertrag von draw-lsystem aussehen?

Die Prozedur gibt mir ja quasi eine Liste von voids zurück:

(list-of-symbols) number number -> (list-of-voids) ??

Und was ist damit, dass er etwas auf dem Turtle-Bildschirm ausgibt? Gehört das nicht in den Vertrag? Bei dem Beispiel mit Ball aus der Folie stands jedenfalls nicht drin.

Mein Example sieht jetzt so aus:
(draw-lsystem '(F + G F) 50 50) -> (list (void) (void) (void) (void))

Außerdem würde ich gerne wissen wie die Tests hier aussehen sollen. Wenn ich das Beispiel ans Ende des Programms setze malt er mir ja in meinem Lindenmayer-System rum.

ciao, Simon.

Verfasst: 15. Nov 2007 13:17
von giftnudel
Du kannst dir ja schöne Beispiele ausdenken, die das Bild nicht kaputtmachen, dann freut sich der Tutor.

Verfasst: 15. Nov 2007 14:52
von ChRiZz88
Bei draw-lsystem muss noch nicht ersetzt werden oder? Also es gibt keinen Bezug zu den Ersetzungsregeln, sondern nur zu der Tabelle mit draw, move und turn, oder?

Edit: Also ich find' das Sierpinkski-Triangle sensationell =) Aber mit L=20 siehts viel geiler aus, größer halt.. Dauert des bei euch auch bald 20 Sekunden, bis er des zeichnet?

Verfasst: 15. Nov 2007 18:03
von Demmi
da draw-lsystem ja im prinzip ne liste von turtle befehlen zurückgibt würde ich das genau so in den vertrag schreiben. Die werden von Ccheme halt nur gleich ausgewertet... hmm und dann wirds direkt zu void...
Kann sich mal jemand dazu äußern, der was definitives weiß? Ein Tutor, Prof oder noch ein höheres Wesen!? ;)

@ChRiZz88: Bei mir zeichnet es gleich alles, wenn ich draw-lsystem aufrufe.
Das Ding sieht geil aus. Bei mir dauert es mit den geforderten Parametern relativ genau 30 Sekunden (Core Duo T2050 @ 1.6GHz, Notebook).
Ich finde man hätte das eher 4 x expand, l=25 und a=60 machen sollen, sonst rechnet sich ne langsamere Kiste ja halb tot. Außerdem verwirrt es vielleicht den ein oder anderen, der dann vermutet, dass sein Prog in ner Endlosschleife hängt.

Übrigens lastet DrScheme nur 1 Kern aus. Bedeutet man könnte die ganze Sache noch für Mehrkernprozessoren optimieren, dann würde es nicht so lang dauern ^^

Verfasst: 16. Nov 2007 11:14
von evel
hi.
hab eine frage:
was bedeutet es, wenn in einer liste quote auftaucht. ist mir bisher nicht begegnet, aber jetzt hab ich bei einem meiner tests so was da stehen:
(list 'quote 1 2 4 'quote 'd 'e 'f 'I).
ich weiß nicht was ich damit anfangen soll. kann mir da jemand helfen?

Verfasst: 16. Nov 2007 11:41
von i3oot
was bedeutet es, wenn in einer liste quote auftaucht
gib mal

Code: Alles auswählen

'(a 'b)
in DrScheme ein... ich hoffe dann wird klar, woher die 'quote kommen.

Verfasst: 16. Nov 2007 12:09
von evel
oh... ja klar! ich muss ja gar keine ' innerhalb der liste mehr machen um eine geschachtelte liste zu bekomen... da hab ich wohl auf dem schlauch gestanden. danke!

Verfasst: 16. Nov 2007 13:49
von Stumpf.Alex
Demmi hat geschrieben:Bei mir dauert es mit den geforderten Parametern relativ genau 30 Sekunden (Core Duo T2050 @ 1.6GHz, Notebook).
Echt ?? Hmm hab den T5500 @ 1,66GHz und bei mir dauerts genau 4 Sekunden (natürlich beachte ich, dass es eine Weile dauert, bis das Programm durchgelaufen ist, obwohl alles schon gezeichnet ist. Am besten zu erkennen, wenn die Zeichenoberfläche von grau zu weiß wechselt).

Mein "alter" PC mit einem Sempron 2400+ schafft es in 6 Sekunden. ^^

Was die Rückgabe betrifft. Bei konsumiert die Funktion nur die Liste und verarbeitet sie zu einer Grafik. Der Output (void) ist ja nur ein Nebenefffekt von turtel. Ich hab daher erstmal keine Rückgabe definiert.

Verfasst: 16. Nov 2007 20:58
von ChRiZz88
Hmm, die Sache mit den Voids ist nur für den Vertrag oder?? Weil für das Programm ist es ja egal, was da zurückgegeben wird, solange ordnungsgemäß gezeichnet wird...

Verfasst: 17. Nov 2007 14:53
von evel
ich hab noch eine frage.. diesmal zu draw-lsystem:
ich muss ja meine F, G, +, - durch die turtle befehle ersetzen. aber wenn ich die in eine liste schreibe, dann werden die ja schon ausgewertet bevor ich sie ersetzt habe und dann zeichnet er nichts... bzw nur einmal das was in der liste steht und setzt dann (void) in die liste ein.
weiß grad nicht was ich tun soll.
hilfe wäre super! danke.

Verfasst: 17. Nov 2007 15:57
von Stumpf.Alex
Probier mal erstens eine korrekte Liste mit den G, F, +, - zu erzeugen. Dann kannste diese Liste mit map durcharbeiten und dabei jeden Befehl durch einen turtle Befehl ersetzen bzw. da ersetzen ja gleich ausführen bedeutet, ausführen lassen.

Re: HA4 7

Verfasst: 18. Nov 2007 14:42
von ChRiZz88
s!mon hat geschrieben:Hallo. Ja es geht mal wieder weiter mit einer neuen Übung :). Sie läuft bei mir schon so weit, bin eigentlich fertig. Das einzige was ich wissen will: Wie muss der Vertrag von draw-lsystem aussehen?

Die Prozedur gibt mir ja quasi eine Liste von voids zurück:

(list-of-symbols) number number -> (list-of-voids) ??
Hat da nun jemand eine Antwort drauf? Vertrag bei z.B. draw-lsystem?

Verfasst: 18. Nov 2007 19:05
von s!mon
Mein Tutor meint, dass da einfach eine Liste von voids zurückgegeben wird.

Verfasst: 18. Nov 2007 20:00
von Skylo
(list 'G '+ '+ (list '+ 'F))
(list '+ '+ 'F '+ '+ '+ (list '+ 'F))
Sofern meine Ausgabe...

Leider wird das letzte Element nicht ausgewertet bei (expand-ntimes)

expand-once funktioniert soweit, aber ich musste im cond etwas verändert damit kein Fehler entsteht.

Jemand ein ähnliches problem gehabt?

Verfasst: 19. Nov 2007 15:09
von Schalli
Demmi hat geschrieben:Bei mir dauert es mit den geforderten Parametern relativ genau 30 Sekunden (Core Duo T2050 @ 1.6GHz, Notebook).
Hmm, ich hab den Centrino Duo T2050 @1.60GHz in meinem Notebook, bei mir dauert es 2 Sekunden bis das Bild fertig ist und weitere 3 Sekunden bis das Programm beendet ist :D