Geschrieben um 19:01 am 14.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Baby Gumby Beiträge: 8 | Hallo! Zwei Beobachtungen zum Verb (sich) setzen: Wenn man setz dich ohne Objekt eingibt, erfährt man "Dir fehlt die erforderliche Geschicklichkeit." "Die erforderliche Geschicklichkeit" dazu, sich auf den Boden zu setzen?!? Erstaunlicher fand ich noch das hier: setz dich auf den xxx. (Es gibt aber kein "xxx".) Da bekommt man als Antwort "Im Augenblick ist "dich" (du selbst) nicht zu sehen." Ok, der Parser hat "dich" wohl als Objekt genommen, aber wie kommt es zustande, dass ich nicht da bin, wo ich... gerade bin? ) setz dich auf den stuhl funktioniert aber, wenn man einen Stuhl definiert hat. Wie würde man übrigens neue transitive (so heissen doch glaub ich die mit "sich" davor) Verben definieren? Ciao, Eike |
Geschrieben um 20:05 am 14.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Eike:
Dies ist der Antworttext #PutOn 4, der aber nicht nur in PutOnSub, sondern auch in DropSub verwendet wird, nämlich wenn noun der Spieler ist. Ich vermute also, dass dein Satz als (##Drop, player) verstanden wird. (Wieso? Dann müsste 'dich' auf das Token [multiheld] passen.) Eike:
Das konnte ich beim schnellen Überprüfen nicht reproduzieren. Es wäre schön, wenn du uns einmal genau sagtest, mit welcher Lib du arbeitest und was sonst noch so im Raum ist. Im Fall mit 'nimm alles' hat sich das Verhalten auch nur gezeigt, wenn ein anderes Objekt in der Nähe war. Solche Objekte rufen manchmal ein recht eigenartiges Verhalten des Parsers hervor, wenn er Dinge impliziert oder falsch gewichtet. Du könntest auch einmal im Debug-Modus mit "trace 2" das Tracing einschalten und schauen, was passiert. Eike:
Reflexiv wäre mein Tipp. Transitiv hat etwas damit zu tun, ob ein Verb ein Objekt verlangt oder nicht. Man würde diese wohl so definieren wie in der Lib:
Dabei muss man aufpassen, wo man diese Erweiterungen einfügt, da Inform immer die erste Zeile, die es findet, hernimmt, ohne nachfolgende Zeilen anzuschauen. Ich vermute, dass so etwas auch mit dem Lib-Verb 'setz' passiert. |
Geschrieben um 20:38 am 14.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Baby Gumby Beiträge: 8 | Hallo! Zitat:
Ehrlich gesagt - ich weiss es nicht. Ich hab das Jump-Start-Kit (3.0) runtergeladen, und die Library selbst zeigt sich nicht sehr auskunftsfreudig in Sachen Versionsnummer. Wo find ich die? Zitat:
Das Beispiel ist minimal (keinerlei Objekte):
Mit Trace 2 bekomm ich folgendes Ergebnis:
[ "setz" setz / "dich" dich / "auf" auf / "den" den / "xxx" ? ] [Parsing for the verb 'setz' (14 lines)] [line 0 * multiheld -> Drop] [line 0 token 1 word 2 : multiheld] [line 0 token 2 word 3 : END] [line 1 * worn 'ab' -> Disrobe] [line 1 token 1 word 2 : worn] [line 2 * multiheld 'ab' / 'hin' / 'weg' -> Drop] [line 2 token 1 word 2 : multiheld] [line 2 token 2 word 3 : 'ab'] [line 3 * Routine(20691) multiheld -> Drop] [line 3 token 1 word 2 : Routine(20691)] [line 4 * multiheld Routine(20691) -> Drop] [line 4 token 1 word 2 : multiheld] [line 4 token 2 word 3 : Routine(20691)] [line 5 * 'dich' / 'mich' 'auf' / 'in' noun -> Enter] [line 5 token 1 word 2 : 'dich'] [line 5 token 2 word 3 : 'mich'] [line 5 token 3 word 3 : 'auf'] [line 5 token 4 word 4 : 'in'] [line 5 token 5 word 4 : noun] [line 6 * 'dich' / 'mich' 'auf' / 'in' noun 'nieder' -> Enter] [line 6 token 1 word 2 : 'dich'] [line 6 token 2 word 3 : 'mich'] [line 6 token 3 word 3 : 'auf'] [line 6 token 4 word 4 : 'in'] [line 6 token 5 word 4 : noun] [line 7 * 'dich' / 'mich' Routine(20694) -> Enter] [line 7 token 1 word 2 : 'dich'] [line 7 token 2 word 3 : 'mich'] [line 7 token 3 word 3 : Routine(20694)] [line 8 * multiexcept 'in' noun -> Insert] [Trying look-ahead] [line 8 token 1 word 2 : multiexcept] [line 8 token 2 word 3 : 'in'] [line 9 * multiexcept 'in' noun Routine(20685) -> Insert] [Trying look-ahead] [line 9 token 1 word 2 : multiexcept] [line 9 token 2 word 3 : 'in'] [line 10 * multiexcept Routine(20694) -> Insert] [Trying look-ahead] [line 10 token 1 word 2 : multiexcept] [line 10 token 2 word 3 : Routine(20694)] [line 11 * multiexcept 'auf' noun -> PutOn] [Trying look-ahead] [Advanced to "noun" token: error 1] [line 11 token 1 word 2 : multiexcept] [line 11 token 2 word 3 : 'auf'] [line 11 token 3 word 4 : noun] [line 12 * Routine(20694) -> Enter] [line 12 token 1 word 2 : Routine(20694)] [line 13 * held 'an' / 'um' -> Wear] [line 13 token 1 word 2 : held] [line 13 token 2 word 3 : 'an'] Im Augenblick ist "dich" (du selbst) nicht zu sehen. Zeile 5 sollte wohl zuschlagen, aber anscheinend wird ein "xxx" nicht als noun erkannt - es gibt ja schliesslich kein "xxx". Letztlich kommt keine der Zeilen zum Zuge, "dich" wird als Objekt angesehen - und eine entsprechende Fehlermeldung generiert. Zitat:
Man würde diese wohl so definieren wie in der Lib: Danke für den Tip! Ciao, Eike PS: Die in der Anleitung angegebene Kontakt-Liste zur deutschen Bibliothek (http://www.if-de.de/liste.html) scheint es nicht mehr zu geben...? |
Geschrieben um 08:41 am 15.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Eike:
Hmm, stimmt. Die Lib-Release sollte eigentlich im Spielbanner auftauchen. Dort steht aber nur, dass es Lib 6/10 ist. Die momentane Release ist 22, du findest sie im textfire.de-Archiv. Die Lib im Jump Start Kit ist älter. (Gedankennotiz an mich selbst: Mal aktualisieren.) Das von dir beschriebene Verhalten zeigt sich aber auch mit der neuesten Lib. Die 'dich'-Zeilen in grammarg.h (Zusammensetzung aus "Gram" und "Argh"?) an den Anfang zu stellen bringt leider auch nichts - außer, dass 'setz dich' nun ein Objekt impliziert oder nachfragt. Weil die Zeile ja nicht vollständig erkannt wird, und andere, nachfolgende Zeilen wohl einen "besseren" Fehler erzeugen. Eike:
Ja, Inform erkennt leider nicht, dass die Struktur des Satzes auf Zeile 5 passt und erwartet dass man Eike:
Ich vermute, dass sich Inform die Zeile, die am besten passt, merkt, zusammen mit einem Fehlercode, und diesen dann ausgibt. Außerdem wird 'dich' hier über den Personalpronomen-Algorithmus erkannt, daher kommt nämlich die Fehlermeldung "Im Augenblick ist "dich" (du selbst) nicht zu sehen." Wobei "zu sehen" bei [multiheld] vielleicht bedeutet "ein Kind des Spielers". Was genau passiert, weiß ich leider nicht. Diese Mailingliste ist nicht speziell für die Inform.de-Lib gedacht, sindern sie ist eine allgemeine Liste zu Textadventures und hat dieselbe Zielgruppe wie dieses Forum. Das Forum wird allerdings weitaus häufiger genutzt. Informationen über die Liste findest du auf dieser Seite. |
Geschrieben um 12:06 am 15.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 61 | Martin:
Das tut sie, wenn man >VERSION tippt. Ansonsten steht sie in German.h, ganz oben, bei Constant LanguageVersion = ... Martin:
Das heißt übrigens Germang.h, aus "Germ" und "Angh". Was auch immer das dann heißen mag. (Germ ist österreichisch für Hefe. Angh gibt's nicht einmal hier.) Wahrscheinlich sollte man die ganze Grammatik einmal durchtesten. Da taucht sicher noch mehr auf. Außerdem macht die Zeile Du wolltest vermutlich folgendes: "wirfe..." Probleme, abgesehen davon, dass ich die Formulierung nicht mag, aber mir ist bislang nichts Besseres eingefallen, das auch funktionieren würde. |
Geschrieben um 17:53 am 15.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 275 | (Ohne was Sinnvolles zum eigentlichen Thema hinzufügen zu können...) Sophie:
Sollte man vielleicht. Bei einer Portierung der Library auf Version 6/11, die ja auch noch aussteht, kommt man eigentlich nicht drumrum. Ist nur eben ein Haufen Arbeit und deshalb findet sich niemand, der das mal eben so macht. Zitat:
Mit dieser Änderung sollte da zumindest "wirf" statt "wirfe" stehen... wird laut Max in der nächsten Ausgabe der deutschen Lib drin sein. |
Geschrieben um 23:14 am 15.06.2005 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Sophie:
Argh! Deshalb also. Ich hatte mich heute morgen vor dem offenbar dringend nötigen Kaffee schon gewundert, warum mir dieser Brüller nicht schon viel früher eingefallen war. Wie dem auch sei, ich habe den Schuldigen gefunden. Es ist wieder einmal das Token [worn]. Offensichtlich ist etwas falsch mit den Attribut-Tokens, auch auf Englisch. Nur, dass es dort nicht auffällt, weil sie nie verwendet werden. Ein einziges Mal habe ich [worn] gefunden, und dann auch nur nach 'take off', so dass es dort wirklich nur im richtigen Kontext verwendet wird. Wenn ich vor die 'put down'-Syntax eine ähnliche Zeile mit [worn] setze, kommt dieses:
Oder auch in der Standard-Lib, ohne extra verbogene Grammatik:
Wenn das Attribut nicht gesetzt ist, ist das Objekt für den Parser also unsichtbar. Der Fehler ITGONE_PE wird in CantSee() gesetzt, wenn das letzte erkennte Wort ein Pronomen ist. (Im Beispiel 'setz dich auf lsmf' ist es allerdings das vorletzte. Ich bin mir nicht ganz sicher, wo der Wortmarker wn in Cantsee steht, er wird aber um eins zurückgesetzt.) Da ITGONE_PE ein relativ hoher Fehlercode ist, hat er Vorrang vor allen anderen, eigentlich besser getroffenen Tokens und wird ausgegeben. Daher bringt es auch nichts, nach einem Attribut-Token denselben Satz noch einmal mit [noun] anzugeben. Wenn man also die [worn]-Zeile aus der Verb-Definition herausnimmt, klappt alles. Da die Attribut-Tokens Probleme machen, könnte man hier bei nicht eindeutigen Sätzen eine Hilfsaktion definieren:
Oder den Code aktualisieren. Da aber (nach einem ersten flüchtigen Durchscannen von GermanG.h) außer den paar [worn]s keine anderen Attribut-Tokens benutzt werden, ist das Umgehen wohl die einfachere Variante. Die ungelenken Texte aus der Lib zu verbessern ist einfacher: Dazu musst du nur ein Objekt LibraryMessages definieren. |