Übung 1 Aufgabe 6.3c - Wie weise ich exisierendem Objekt...

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Übung 1 Aufgabe 6.3c - Wie weise ich exisierendem Objekt...

Beitrag von Drudge »

Moin!

Ich habe ein Problem mit der letzten Gruppenaufgabe. Bei der update_stock_scifi-Prozedur muss einem Bestehenden Objekt ein neuer Wert zugewiesen werden.
Ich habe jetzt schon einige Versuche unternommen, komme aber irgendwie nicht darauf, wie ich dem DVD-Objekt eine neue Anzahl an DVD's zuweisen soll.

Muss ich ein neues Objekt mit dem gleichen Namen erstellen und bei den Parametern alles gleich belassen außer die Anzahl der DVD's im Lager, oder gibt es eine Möglichkeit wie x = x + 3???

Zur Orientierung, meine Struktur und die Prozeduren sehen folgendermaßen aus:

Code: Alles auswählen

(define-struct DVDObjekt (Name Genre Filmlaenge Sprache Anzahl))

(define (check_stock DVDTitel)
  (if  (DVDObjekt? DVDTitel)
          (if  (< (DVDObjekt-Anzahl DVDTitel) 3)
                 'Nachbestellen
                 (DVDObjekt-Anzahl DVDTitel))
           'Keine_gueltige_Angabe))

(define (update_stock_scifi DVDTitel)
  (if  (DVDObjekt? DVDTitel)
          (if  (symbol=? (DVDObjekt-Genre DVDTitel) 'SciFi)
               (make-DVDObjekt 
                             (DVDObjekt-Name DVDTitel)
                             (DVDObjekt-Genre DVDTitel)
                             (DVDObjekt-Filmlaenge DVDTitel)
                             (DVDObjekt-Sprache DVDTitel)
                             (+ (DVDObjekt-Anzahl DVDTitel) 3)
                             )
             'Keine_SciFi_DVD)
         'Keine_DVD))

Ich bin dankbar für jede Hilfe. :D

Benutzeravatar
blowfish
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 241
Registriert: 18. Okt 2006 16:00

Re: Übung 1 Aufgabe 6.3c - Wie weise ich exisierendem Objekt

Beitrag von blowfish »

Drudge hat geschrieben: Muss ich ein neues Objekt mit dem gleichen Namen erstellen und bei den Parametern alles gleich belassen außer die Anzahl der DVD's im Lager....
joa, so würd ich sagen!
Ein Hemd ist Einstellungssache!

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Na da ist mir die Java-Variante dann doch lieber!

Zudem bekomm ich's auch irgendwie mit dem neuen Objekt nicht hin.
Der Code, wie ich ihn oben schon gezeigt habe, produziert folgende Ausgabe:


50
(make-DVDObjekt 'Doom 'SciFi 120 'Deutsch 53)
50


Ist ja eigentlich klar, da das neue Objekt ja an keine Variable zurück gegeben wird.
Jetzt dachte ich mir, dass ich einfach (DVDTitel (make-DVDObjekt ....) hin schreibe, damit in DVDTitel das alte Objekt überschrieben wird, aber dann kommt folgende Fehlermeldung:

function call: expected a defined name or a primitive operation name after an open parenthesis, but found a function argument name


Wenn ich jetzt DVDTitel definiere, kommt folgende Fehlermeldung:

define: found a definition that is not at the top level


Ich komme also im Prinzip kein Stück vorwärts. :?

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Ich hab ne Möglichkeit in der Doku von Scheme gefunden die Anzahl zu ändern ohne das Objekt neu zu erstellen ...

Bringt uns aber net wirklich was, da es erst ab Sprachlevel "Fortgeschrittene"
vorhanden ist.

Code: Alles auswählen

(set-dvd-amount! alien (+ (dvd-amount alien) 3) )
:(

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Na trotzdem gut zu wissen, oder!?! :wink:
Thx!

Benutzeravatar
Robert
Ehemalige Fachschaftler
Beiträge: 511
Registriert: 6. Okt 2004 17:38
Wohnort: DA

Beitrag von Robert »

also du musst das objekt nicht ändern, es genügt einfach wenn du ein objekt zurückgibst bei dem die anzahl entsprechend erhöht wurde

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Wenn es um Java ginge wüsste ich ja auch wie ich das machen soll, allerdings gehts um Scheme und hier raff ich einiges nicht. :?

Benutzeravatar
Wolle
Ehemalige Fachschaftler
Beiträge: 127
Registriert: 8. Jan 2005 13:23
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Wolle »

nene wie robert sagte
einfach neues objekt und alle unveränderlichen werte einfach übernehmen
set-befehle kennt ihr doch noch garnicht!
Always remember that you are unique. Just like everyone else.

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

@Wolle: Na die Aussage hilft mir nun überhaupt nicht. Habe ich aber vorher schon erklärt wieso. Ich weiß einfach nicht wie ich innerhalb einer Prozedur ein neues Objekt erstelle. Mit dem define-Befehl geht es nicht, da ich folgende Fehlermeldung bekomme: define: found a definition that is not at the top level!
Na da ist mir die Java-Variante dann doch lieber!

Zudem bekomm ich's auch irgendwie mit dem neuen Objekt nicht hin.
Der Code, wie ich ihn oben schon gezeigt habe, produziert folgende Ausgabe:

50
(make-DVDObjekt 'Doom 'SciFi 120 'Deutsch 53)
50

Ist ja eigentlich klar, da das neue Objekt ja an keine Variable zurück gegeben wird.
Jetzt dachte ich mir, dass ich einfach (DVDTitel (make-DVDObjekt ....) hin schreibe, damit in DVDTitel das alte Objekt überschrieben wird, aber dann kommt folgende Fehlermeldung:
function call: expected a defined name or a primitive operation name after an open parenthesis, but found a function argument name

Wenn ich jetzt DVDTitel definiere, kommt folgende Fehlermeldung:

define: found a definition that is not at the top level

Ich komme also im Prinzip kein Stück vorwärts. :?

Benutzeravatar
blowfish
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 241
Registriert: 18. Okt 2006 16:00

Beitrag von blowfish »

Drudge hat geschrieben: Ich weiß einfach nicht wie ich innerhalb einer Prozedur ein neues Objekt erstelle. Mit dem define-Befehl geht es nicht....
natürlich geht das nicht. n objekt erstellt man ja auch mit make-objekt.

PS: verdammt, ich bin schon wieder in versuchung eine bermerkung abzulassen, aber da die ja eh gelöscht wird vom admin und ich denn noch ne verwarnung kassiere, die ich mir für bessere momente aufheben will, lass ich's lieber :twisted: !
Ein Hemd ist Einstellungssache!

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Ich glaube da hat jemand mal wieder was geschrieben, ohne zu lesen was bisher im Thread steht?!? Ich weiß´, dass man ein Objekt mit (make-xy) erstellt...

Zudem bekomm ich's auch irgendwie mit dem neuen Objekt nicht hin.
Der Code, wie ich ihn oben schon gezeigt habe, produziert folgende Ausgabe:

50
(make-DVDObjekt 'Doom 'SciFi 120 'Deutsch 53)
50

Ist ja eigentlich klar, da das neue Objekt ja an keine Variable zurück gegeben wird.
Jetzt dachte ich mir, dass ich einfach (DVDTitel (make-DVDObjekt ....) hin schreibe, damit in DVDTitel das alte Objekt überschrieben wird, aber dann kommt folgende Fehlermeldung:
function call: expected a defined name or a primitive operation name after an open parenthesis, but found a function argument name


...die Frage lautet aber nicht wie ich das Objekt erstelle, sondern wie ich es an einen Bezeichner übergebe, damit ich auch weiterhin zugriff auf dieses Objekt habe.

Ich hab doch ausführlich beschrieben, welche Fehlermeldungen ich erhalten habe. Statt kund zu tun, wie bekloppt oder unfähig hier einige sind, auch wenn du es nicht direkt gesagt hast, könntest du einfach mal hinschreiben wie es geht, oder es einfach ganz sein lassen. Wiedermal so ein typisches NERD-Verhalten! "Ich weiß alles ihr wisst nix und seit es nicht würdig im Forum um Hilfe zu bitten" Danke, aber auf so Helden wie du es bist kann ich verzichten. Ich schreibe hier etwas weil ich nicht weiter weiß und nicht um mich noch schlechter zu fühlen.

PS: Ich weiß net warum ich mich darüber überhaupt so aufrege, aber ich bin erst aufgestanden und brauch sowas am "Morgen" eigentlich nicht.

Xelord
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 23. Okt 2004 09:49

Beitrag von Xelord »

Hallo,

um das Objekt mit dem Namen DVDtitel anzusprechen, musst du es mit define "zuweisen".


(define DVDtitel (make-DVDObjekt 'Doom 'SciFi 120 'Deutsch 53))

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Wenn ich jetzt DVDTitel definiere, kommt folgende Fehlermeldung:

define: found a definition that is not at the top level

Ich komme also im Prinzip kein Stück vorwärts.
8) Das habe ich ja, wie im zweiten Beitrag von mir beschrieben, schon ausprobiert.
Allerdings kann man innerhalb einer Prozedur den define-Befehl wohl nicht verwenden.

Benutzeravatar
Alarion
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 159
Registriert: 18. Mai 2005 12:09
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Alarion »

Drudge hat geschrieben:
(make-DVDObjekt 'Doom 'SciFi 120 'Deutsch 53)
Wo ist das Problem an dieser Ausgabe? Du hast doch vermutlich ein Objekt mit hinten ner 50 reingesteckt...?

Oder ist das eine Frage, die über die Hausübungsaufgabe hinausgeht?
Tutor "Grundlagen der Informatik 1" im WS06/07

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Die Aufgabe hat doch mit der Hausübung garnichts zu tun??? Na egal... also es ist ja nicht Sinn der Sache eine Ausgabe mit einem neuen Wert für die Anzahl der DVDs im Lager zu erstellen, sondern das das Objekt der Datenstruktur zu aktualisieren. Dazu muss ein das Objekt unter dem Namen DVDTitel mit den aktuellen Daten überschrieben werden. Zur Zeit weiß ich allerdings nicht wie. Wenn ich nur
(make-DVDObjekt 'Doom 'SciFi 120 'Deutsch 53)
als Ausgabe habe, ändert dies ja noch nichts an dem eigentlichen Objekt.

PS: Mich interessiert dieses Problem im Allgemeinen. Das es Teil einer Gruppenübung ist spielt dabei keine Rolle.

Antworten

Zurück zu „Archiv“