Übung 6, Aufgabe 7 - Metainterpreter

sge
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 3. Okt 2007 10:49
Wohnort: Darmstadt

Beitrag von sge »

Laut der Aufgabe soll die Fkt doch Streams UND Listen verwalten(übergeben bekommen) können.
Dafür muss ich ja irgendwie abfragen können, um was es sich bei der Eingabe handelt.

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Was ist denn der genaue Unterschied zwischen Streams und Listen :wink: ?


Also:
In dieser Übung soll gezeigt werden, dass bei normaler Auswertungsreihenfolge Funktionen höherer Ordnung
gleichermaßen mit Listen und Streams funktionieren.
Ergo: Gleiche Funktion kann über einen Stream auf die gleiche Weise operieren wie über Listen.
(define alon (my-cons 1 (my-cons 2 (my-cons 3 (my-cons 4 (my-cons 5 (empty)))))))
Das ist eine Liste und kann mit my-cons ausgewertet werden und von Prozeduren höherer Ordnung verarbeitet werden -> siehe 3. Teilaufgabe.
(define nst (lambda (n) (my-cons n (nst (+ n 1)))))
(define nat (nst 1))
Das ist ein Stream, der ebenfalls von my-cons ausgewertet werden kann und kann daher später auch problemlos in der 3. Teilaufgabe von der gleichen Funktion, ohne Fallunterscheidung, verarbeitet werden, die die Liste auch schon manipuliert hat.

sge
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 3. Okt 2007 10:49
Wohnort: Darmstadt

Beitrag von sge »

Ach... Danke
Jetzt hat's KLICK gemacht!

Die Listen, die verarbeitet werden sollen sind auch nur my-cons-Listen und keine cons-Listen, oder?

Ansonsten würde man ja eine Fallunterscheidung machen müssen.

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus »

Fallunterscheidung schlägt fehl, weil du keinen Befehl zum Testen hast. Und die Listen im Meta-Programm sind bei uns ja auch my->cons-Listen.

sge
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 3. Okt 2007 10:49
Wohnort: Darmstadt

Beitrag von sge »

Ja, ok, dass war mein Denkfehler, dachte die Fkt soll auch cons-Listen bearbeiten können.

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 »

Unsere Filter-Funktion gibt uns:
map: all lists must have same size; arguments were: (lambda (a1 a2) ...) (list 'x 'y) (shared ((-17- (make-application (make-variable 'my->cons) (list 10 (make-variab...
...bei der Eingabe (my-filter (lambda (x) (< x 3)) (my->cons 10 nat)).

Woran könnte das liegen??

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Naja, ganz einfach, du hast erst die my-cons Liste in eine normale cons-Liste vor der Verarbeitung des filters umgewandelt. Das versteht der Interpreter aber nicht. Schreib es einfach um, dass my-cons die äußertes Klammer bildet. Dann sollte es klappen.

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Beitrag von Osterlaus »

Genau, so müsste es gehen. Ich musste auch erst überlegen, warum das so ist, jetzt ists mir aber klar: my-filter macht dir aus einem Stream und einer Funktion sozusagen einen neuen Stream von zurechtgefilterten Elementen.

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Beitrag von mcdikki »

Wie ist das eigentlich bei der 7.3:

Sollen wir da <> 0 auf beide listen aufein mal anwenden?
Oder > 0 auf alon und dann alterate-nat und anschließend < 0 auf die beiden hintereinnander?

Bin gerade im Poolraum am tüfteln mit einem Komilitonen und wir wissen nicht weiter.


PS: Das problem mit den Streams haben wir gelöst indem wir eine Funktion ähnlich my->cons implementiert haben die anstelle von normalen cons my-cons listen erzeugt. Diese lassen wir dann auf die Streams los bevor wir sie verarbeiten. Sonst gibt es ja ne endlosscheilfe.

lg mcdikki

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Sollen wir da <> 0 auf beide listen aufein mal anwenden?
Oder > 0 auf alon und dann alterate-nat und anschließend < 0 auf die beiden hintereinnander?
Hmm, ich habe dass aufgefasst, dass du die Liste alon jeweils mit < und dann seperat mit > filterst. Das gleiche mit dem Stream auch in seperaten Aufrufen. So wird ja auch im Endeffekt gezeigt, dass deine Funktion filter auf Listen sowie Streams gleichermaßen funktioniert.

PS: Das problem mit den Streams haben wir gelöst indem wir eine Funktion ähnlich my->cons implementiert haben die anstelle von normalen cons my-cons listen erzeugt. Diese lassen wir dann auf die Streams los bevor wir sie verarbeiten. Sonst gibt es ja ne endlosscheilfe.
Den Zweck verstehe ich irgendwie nicht und sehe auch keine Problematik dabei. Also bei mir gehts ohne perfekt. Aber wäre nett, dass Problem bitte noch mal zu erläutern. Vielleicht habe ich da auch was übersehen.

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Beitrag von mcdikki »

Wenn ich filter auf einen Stream anwende bekomme ich eine endlosschleife.
Da das wohl kaum Sinn der Sache ist wollte ich nur teile des Streams filtern.

Dazu wollte ich my->cons verwenden. Da my->cons aber eine echte consliste liefert bricht der metainterpreter zu recht ab.

Daher habe ich eine Funktion implimentiert, die nur einen Teil eines Stream oder einer List als my-cons liste liefert, so das der metainterpreter sie verarbeiten kann.

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Echt? Also mein alterate-nat Stream funktioniert mit meinem filter wunderbar und ich brauche auch gar keine Extrafunktion um Streams auszuwerten. Es ist auch schon ein Stream nat und eine Liste alon definiert. Beides sollte Problemlos mit filter arbeiten. Das ist ja auch das Ziel der Hausübung, nämlich zu zeigen, dass Streams sowie Listen sich gleichermaßen ohne zusätzliches Handling mit filter verarbeiten lassen.

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon »

Hier hätte ich auch noch ne Frage. Was muss denn in die Übung kommentarmäßig rein? Brauchen wir da überhaupt irgendwo einen Vertrag? Wie siehts mit Tests aus? Ich meine die letzte Teilaufgabe sind ja quasi 4 Tests..

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Hmm..also es wird nirgends ein Vertrag oder Tests gefordert, also würde ich sagen nein. Es wird nur gefordert, dass du deinen Code kommentierst. Und bei den Tests.... naja, wird auch nicht gefordert und falls du es vor hast...viel Spaß! :wink:

Wambolo
Computerversteher
Computerversteher
Beiträge: 381
Registriert: 18. Okt 2007 11:36

Beitrag von Wambolo »

also einen Vertrag für Filter würde ich schon angeben
Interpreter/Parser reported on Nov 12, 2008 8:30:04 PM:
Number too big (102 > 42).

Antworten

Zurück zu „Archiv“