Übung 6, Aufgabe 7 - Metainterpreter

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

Übung 6, Aufgabe 7 - Metainterpreter

Beitrag von Osterlaus » 29. Nov 2007 12:27

Moin,
ich hangele mich grade durch die Hausübung mit dem Metainterpreter. Die erste Funktion - Stream von Zahlen mit alternierenden Vorzeichen - ging ja noch, aber irgendwie schaffe ich es nicht, meinem my-filter die richtige Verwendung der Funktion beizubringen. Übergebe ich my-filter eine Lamdba-Funktion

Code: Alles auswählen

(lambda (n) ( > n 0 ))
, meckert der Metainterpreter beim Ausführen:
eval-var: Unbound variable: '>
Sehr komisch. Benutze ich ( = n 0 ), lautet die Ausgabe gar
eval-app: Primitive or composed procedure expected, found: (list 1 2 3 4 5)
Leider ist beim Ausführungslevel Fortgeschritten auch der Stepper verschwunden, sonst würd ich mich da mal durchquälen, auch wenn die Ausgabe wohl SEHR unangenehm aussehen würde...
Für Ideen bin ich gerne offen ;)
Nico

majer
Neuling
Neuling
Beiträge: 4
Registriert: 22. Okt 2007 13:22

Beitrag von majer » 29. Nov 2007 13:41

Hallo Nico,

schau dir doch mal die vom Metainterpreter zur Verfügung gestellten primitiven Prozeduren mal genauer an ....

Viel Erfolg
Niko

Benutzeravatar
taufrisch
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 30. Sep 2007 02:42
Wohnort: 127.0.0.1

Beitrag von taufrisch » 29. Nov 2007 13:42

Guck mal was der Metainterpreter für Funktionen kann. Kleiner Tip: '>' ist nicht darunter, dafür aber das andere Zeichen auf der selben Taste, so du denn eine deutsche Tastatur hast.

Durchsteppen habe ich mal versucht - das bringt fast gar nichts, der Metainterpreter dominiert ganz gut. Da bräuchte man einen Metadebugger...
Premature optimization is the root of all evil.

Don't anthropomorphize computers: They hate that.

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

Beitrag von Osterlaus » 29. Nov 2007 13:59

D'oh. Gut, dann habe ich mir eben > mal selbst erstellt ;) Jetzt gibt mir

Code: Alles auswählen

( my-filter ( lambda ( n ) ( < n 0 ) ) ( my->cons 10 alon  ) )
schon den nächsten Fehler:
eval-app: Primitive or composed procedure expected, found: (list 1 2 3 4 5)
Und der Stepper ist bei mir nicht verfügbar, der Button in der GUI fehlt beim Sprachlevel Fortgeschritten unter Windows.

Okay, scheinbar muss ich in der Filter-Funktion mit first und rest statt my-first und my-rest arbeiten. Dann gibt mir die Funktion nämlich schon mal ein empty zurück, was ja richtig wäre. Mache ich dasselbe aber mit

Code: Alles auswählen

( my-filter ( lambda ( n ) ( < n 0 ) ) ( my->cons 10 alternate-nat  ) )
, bekomme ich einen unausgewerteten make-proc-Aufruf....

Benutzeravatar
taufrisch
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 30. Sep 2007 02:42
Wohnort: 127.0.0.1

Beitrag von taufrisch » 29. Nov 2007 14:13

'filter' soll auf Listen oder Streams arbeiten, aber auf my-cons-Listen und nicht cons-Listen. 'my->cons' macht dir aber aus einer my-cons-Liste eine cons-Liste, und dann motzt 'filter' zurecht.

Uff, jetzt ist es wenigstens richtig.

Die Aufgabenstellung ist etwas verwirrend, insbesondere sollte es 'my-filter' heißen.
Premature optimization is the root of all evil.

Don't anthropomorphize computers: They hate that.

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

Beitrag von Osterlaus » 29. Nov 2007 15:40

Aufruf umgewandelt, nun steht im Aufruf my-cons ohne >, und nun motzt eval-app in dem ersten apply-Aufruf mit folgender Meldung:
first: expected argument of type <non-empty list>; given (make-proc (list 'n) (make-if-clause (make-application (make-variable '=) (list (make-variable 'n) 0)) 10 (make-variable 'alternate-nat)))
So ein.......

Benutzeravatar
taufrisch
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 30. Sep 2007 02:42
Wohnort: 127.0.0.1

Beitrag von taufrisch » 29. Nov 2007 15:47

'first' wiederum arbeitet auf cons-Listen, nicht auf my-cons-Listen. Auf denen arbeitet dann natürlich 'my-first'. Deswegen ist 'filter' im Übungsblatt auch irreführend und sollte 'my-filter' heißen.

Ich glaube ich bin der Einzige in der ganzen Vorlesung der Scheme echt mag...
Premature optimization is the root of all evil.

Don't anthropomorphize computers: They hate that.

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

Beitrag von Osterlaus » 29. Nov 2007 16:23

Auch mit my-first und my-rest gibts nur Probleme. Tut mir leid, wenn das hier so eine Art Privat-Nachhilfe-Thread wird, aber nun habe ich wieder das Problem, das ich um 13:59 geschildert habe: Als Ausgabe erscheint eine make-proc-Anweisung, die nicht ausgeführt wird :(

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

Beitrag von Osterlaus » 29. Nov 2007 16:51

Kommando zurück, das liegt an dem Aufruf. Man bedenke, dass my-filter wiederum einen Stream erzeugt, wenn man der Funktion einen Stream übergibt...

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

Beitrag von Wambolo » 30. Nov 2007 17:06

arbeitet euer filter auch ewig langsam?

bei mir dauert es ewig, bis die 10 elemente rausgefiltert werden.

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

Beitrag von Osterlaus » 1. Dez 2007 15:02

Jopp, das Problem habe ich auch. Obwohl "langsam" und "ewig" fast schon untertrieben sind ;)

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

Beitrag von s!mon » 2. Dez 2007 17:28

Ich hätte auch mal ne Frage

prog ist doch ein normales "Scheme-Programm". Ich darf allerdings auch nur die Funktionen dort verwenden, die ich selber definiere oder die in primitive-procedures enthalten sind.

Für meine Filterfunktion habe ich quasi die filter1-Funktion aus Folie T5-11 genommen und umgeschrieben. Also die cond-Ausdrücke durch if ersetzt usw..

Jetzt bekomme ich aber die Meldung, dass rel-op eine ungebundene Variable ist. Wo liegt mein Fehler?

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

Beitrag von s!mon » 2. Dez 2007 19:29

hat sich erledigt. hatte vergessen, dass ich lambda statt define benutzen muss ;)

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

Beitrag von sge » 2. Dez 2007 22:46

kann man irgendwie unterscheiden, ob es sich bei dem dem parameter um einen stream, oder um eine liste handelt?
cons? und my-cons? funktioniert ja nicht.

Die beiden Teilfunktionen für Streams, bzw. Listen funktionieren für sich perfekt!

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

Beitrag von Stumpf.Alex » 3. Dez 2007 00:55

Was haste damit vor?!?

btw: Beim Metainterpreter kann man locker Frühstücken gehen.

Antworten

Zurück zu „Archiv“