if-de :: Forum Foren-Übersicht
Autor Nachricht
<  "Frage die Frau nach ..." mit Punkt beenden
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 1:42  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Jetzt auch mit Strichpunkt Overkill.

So ernst war's jetzt nicht gemeint. Ich sag jetzt einfach mal vor dem Sprung ins Bett: Da muss mittelfristig ein wenig Semantik rein. Nichtsdestrotrotz finde ich die Use-Option super!
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 16 Apr 2012 - 8:27  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

proc hat folgendes geschrieben:
Offenkundig wird ein Schlusspunkt im Parser missinterpretiert und stört.

Nicht ganz richtig. Der Punkt stört nur, wenn er auf einen Topic folgt. Bei "normalen" Eingaben stört der Punkt nicht und schließt einfach den Satz ab und leitet einen neuen Satz ein, wenn nach dem Punkt noch etwas kommt.

Das Problem ist, dass Inform die Topics außerhalb der normalen Struktur für Aktionen (Verb, noun, second) ablegt. Wenn ein neuer Satz angefangen wird, wird das Topic ungültig. Wieso das so ist, verstehe ich nicht genau, denn Inform arbeitet eine Kette von Eingaben einzeln ab. Ein Parser-Fehler bricht die Kette ab, aber ein Parser-Fehler im zweiten Satz behindert nicht die Ausführung des ersten. Ein logischer Fehler (also einer, der dazu führt, dass das die Anweisung in der Spielwelt nicht ausgeführt werden kann, etwa wenn man einen Zettel abschließt oder etwas aufhebt, aber nichts mehr tragen kann, oder in eine Richtung geht, in der es keine Ausgang gibt) bricht die Kette nicht ab, was natürlich auch zu etwas überraschenden Ergebnissen führen kann:

I7 hat folgendes geschrieben:
>n. s. z
Du kannst nicht in diese Richtung gehen.

Du kannst nicht in diese Richtung gehen.

Die Zeit verstreicht.

>m. s. z
Ich habe dieses Verb nicht verstanden.

>n. t. z
Du kannst nicht in diese Richtung gehen.

Ich habe dieses Verb nicht verstanden.

Eigentlich müsste also die Information über die Topics noch vorhanden sein, wenn die erste Anweisung ausgeführt wird. Tatsächlich verschiebt sich aber alles. Ich vermute, dass Inform den Punkt sieht und wenn es danach noch Wörter gibt, denkt "Aha, es geht also noch weiter", eine Flagge setzt und alles nach dem Punkt nach vorn verschiebt, so dass die neue Analyse wieder bei Wort eins und nicht bei Wort 5 oder so anfängt. Wenn das Topic bei Punkten aufhören würde, sähe das bei "Frage Peter nach Anna. Warte" so aus:


  • [ frage, peter, nach, anna,. ,warte ]
  • Satz 1: ##Ask, noun=Peter, topic=(4, 1)
  • Held-Back Mode: Merken und alles verschieben, die Eingabe ist jetzt:
  • [ warte ]
  • ##Ask ausführen: das Topic (4,1) zeigt jetzt auf Wort 4, die Eingabe hat aber nur eins. Pardauz!
    [ warte, .]


Ich fände es ja einfacher, wenn der hb_mode auf das erste Wort des nachfolgenden Satzes zeigen würde oder 0 oder -1 wäre, wenn es keine weiteren Satz gibt. Stattdessen werden hier wieder die Puffer hin- und hergeschoben und der hb_mode ist true.

proc hat folgendes geschrieben:
Ich sag jetzt einfach mal vor dem Sprung ins Bett: Da muss mittelfristig ein wenig Semantik rein.

Hmmm. Kommas trennen mehrere Objekte voneinander ab, Punkte trennen mehrere Sätze voneinander ab oder leiten die wörtliche Rede ein ("Hans, hau ab"). Das andere Satzzeichen, das als eigenes Wort betrachtet wird, ist das doppelte Anführungszeichen. Alle anderen Satzzeichen werden nicht gesondert betrachtet und einfach den Wörtern, an denen sie hängen, zugeschlagen. Durch geeignete Informisierung könnte man das gewiss ändern.

Aber was soll der Parser verstehen können? Soll man Semikolons zulassen oder sagen, dass Inform sie nicht versteht und so den Spieler sanft dazu drängen, Punkte zu verwenden. Dann müsste die Fehlermeldung bei "u Buch; nimm es" aber nicht "So etwas kannst du hier nicht sehen" heißen, sondern "Ich verstehe das Satzzeichen ';' nicht."

Semikolons werden im Deutschen, wo es ja keinen comma splice gibt, eh selten verwendet. Andererseits wäre es schön, wenn man Sätze durch Kommas voneinander abtrennen könnte, das finde ich sogar intuitiver als Punkte. Das könnte man ja sogar in der Informisierung machen: Wenn das Wort nach dem Komma ein Verb oder eine Richtung ist, wandelt man das Komma in einen Punkt um. Wenn man das Wort "und" äquivalent zum Komma behandet, könnte man auch sagen "Nimm Kuchen und iss ihn". (Aber Vorsicht, Falle: "nimm langes Messer, kurzes Messer, reich belegtes Sandwich".)

Es wäre gewiss auch nicht schlecht, irreführenden Code hinter einer Use-Option zu verstecken. Ich glaube, dass die Erteilung von Befehlen mit "Schatz, reich mir die Butter" sehr selten benutzt wird und auch die Gefahr birgt, dass sie, wenn sie benutzt wird, unterimplementiert ist, dass also nur wenige, für den Spieler nicht immer klar erkennbare Befehle verstanden werden - meistens kommt ja "Dein Schatz hat besseres zu tun." Wenn man dieses Verhalten erst explizit anschalten müsste, würde so etwas nicht mehr so oft vorkommen:

I7 hat folgendes geschrieben:

> nim ball, seil
Du möchtest wahrscheinlich jemandem eine Anweisung erteilen, aber mir ist nicht klar wem.


Ausrufezeichen als Punkte zu verstehen, ist gewiss vernünftig. Aber Fragezeichen? Es ist gewiss praktikabel, sie auch einfach als Punkte zu interpretieren, um das oft bemühte "Was ist ein Graus?" umsetzen zu können, aber eigentlich ändert ein Fragezeichen ja den ganzen Satz.

Und den Unsinn mit den Auslassungspunkten wollen wir unseren Spielern wohl nicht durchgehen lassen ... (Im Moment wird die Eingabe ausgeführt, gefolgt von "Ich habe dieses Verb nicht verstanden". Ein erster Versuch mit Twins schlug aber fehl, da zwei Punkte nur einmal ersetzt werden. Wenn man aber nach der neuen Tokenisierung in CheckTwins die Routine noch einmal aufruft, kann man Zwillinge rekursiv ersetzen und "z... z... z..." sagen)

ChristanB hat folgendes geschrieben:
Use punctuation apocalypse now.

Hört sich eher an wie I7-Guru am Rande des Nervenzusammenbruchs. :-)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mario Donick
BeitragVerfasst am: Mo, 16 Apr 2012 - 9:32  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

Mein Gott, ist das alles kompliziert O.o Was so eine einfache Frage alles auslösen kann :D

"Use punctuation apocalypse now" finde ich aber auch herrlich ;)

Danke für's Herausfinden und Implementieren -- notfalls hätte man in deutscher IF dem Spieler auch einfach vor dem Spielstart sagen können, dass man Sätze nicht mit Punkten beenden darf, aber so ist's natürlich besser (falls es nicht noch ungewollte Nebeneffekte hat). Ich werd's mal wieder ausprobieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 9:55  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Martin hat folgendes geschrieben:
Hört sich eher an wie I7-Guru am Rande des Nervenzusammenbruchs. :-)

Och, der Rand des Wahnsinns ist ja der Luftkurort eines jeden I7-Autors. Plus -- wie Ted Mosbys Mutter sagt: "Nothing good happens after 2 a.m." Zum Ausprobieren lass ich das mal so.

Für alle, denen das sanfte Coupieren einiger Satzzeichen am Ende der Eingabe nicht reicht: Ich habe jetzt den stillgelegten deform-Einhänger HandlePunctuation() wiederbelebt; da kann man sich dann so richtig austoben und machen, was man will. Er befindet sich unmittelbar VOR der gestrigen Apokalypse-Behandlung und muss VOR "Definitions.i6t" eingebunden werden. HandlePunctuation benötigt keine weitere Use-Option und kann einfach so benutzt werden.

http://ifiction.pageturner.de/inform7/test/German_3-120416--TEST3.zip

Es folgt ein Beispiel, in dem nur Kleinbuchstaben (Großbuchstaben gibt es an dieser Stelle nicht mehr in der Eingabe), Zahlen, das Komma und das Minus als Zeichen in der Spielereingabe zugelassen sind. Alles Andere wird mit einem Leerzeichen überschrieben und neu in Tokens aufgesplittet. (Im Code benutze ich die ZSCII-Werte, weil die Notation mit Hochkommas (',//') hier momentan nicht funktioniert, warum auch immer.

Code:
Include (-
[ HandlePunctuation       ze last;
   #ifdef TARGET_ZCODE;
   ze = 2 + buffer->1;
   #ifnot; ! TARGET_GLULX
   ze = WORDSIZE + buffer-->0;
   #endif; ! TARGET_
   
   last = buffer->(ze-1);
   
   ! Nur normale Buchstaben und Komma erlauben.
   ! Sonderzeichen werden mit einem Leerzeichen überschrieben
   
   if (last == 44 or 45) return; ! Komma und Minus erlauben.
   if ( (last >= 48 && last <= 57)  ! Zahlen und ...
      || (last <= 97 && last >= 122) )  ! ... Kleinbuchstaben erlauben.
         return;
      
   buffer->(ze-1) = 32;
   VM_Tokenise(buffer, parse); ! Neu in Tokens auflösen
];
-) before "Definitions.i6t".

_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 16 Apr 2012 - 11:03  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

ChristianB hat folgendes geschrieben:
Im Code benutze ich die ZSCII-Werte, weil die Notation mit Hochkommas (',//') hier momentan nicht funktioniert, warum auch immer.

Was ist wohl geeigneter, einen in den Wahnsinn zu treiben, I6 oder I7? Das ',//' mit den zwei Schrägstrichen ist der Wörterbucheintrag, der als einziges Zeichen das Komma enthält. Das ZSCII-Zeichen Komma ist ',' ohne die beiden Schrägstriche.

(Oder für Extrem-Nostalgiker natürlich "$n#,", allerdings ohne die Gänsefüßchen - hab's aber in I7 noch nicht getestet).
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 13:23  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Martin hat folgendes geschrieben:
Was ist wohl geeigneter, einen in den Wahnsinn zu treiben, I6 oder I7? Das ',//' mit den zwei Schrägstrichen ist der Wörterbucheintrag, der als einziges Zeichen das Komma enthält.

Ups. Basiswissensschwund. Sowas aber auch ...

Hab dann grad mal die Notation im Apokalypse-Code auf Zeichen geändert. Von wegen Lesbarkeit und so.

http://ifiction.pageturner.de/inform7/test/German_3-120416--TEST4.zip
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mario Donick
BeitragVerfasst am: Mo, 16 Apr 2012 - 14:37  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

Brauch ich das Update auch? Oder reicht TEST2, bis es eine neue offizielle GerX Version gibt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 14:41  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Du kannst die TEST2-Version für Deine Zwecke verwenden, die nachfolgenden Änderungen betreffen den HandlePunctuation-Einhänger. Allerdings könnte es für uns etwas leichter sein, weitere Fehlermeldungen nachzuvollziehen, wenn Du die aktuellste Testversion installiert hast. So aufwendig ist die Installation ja nicht.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 14:44  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

@Team GerX: Inform murrt, weil eine Rule in GerX 3/1204xx unnötigerweise umbenannt wurde:
Code:
Check thinking about it (this is the block thinking about rule):

GerX 3/111111 und früher hat folgendes geschrieben:
Check thinking about it (this is the block thinking about it rule):

Könntet ihr die aus Kompatibilitätsgründen wieder rückumbenennen?
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 14:54  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

In der aktuellen Version lautet die Rule:

Code:
Check thinking about (this is the block thinking about rule): ...


Das "it" ist gestrichen, weil es nicht mit dem Topic-Token zusammenarbeiten will.

Der Name der Rule sollte mit der Regel selbst korrespondieren, finde ich. Deshalb bitte ich alle Autoren, die die Regel in ihrem Quelltext erwähnen, diese Änderung nachzuziehen.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 15:00  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

Na gut, auch nicht wild. War 'n Versuch...
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 17:27  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Sooo. So spaßig die "punctuation apocalypse now"-Option auch war, sie löst das Problem nicht genau dort, wo es seine Ursache hat. Die Option habe ich wieder rausgenommen. Der Einhänger HandlePunctuation() bleibt aber unabhängig davon bestehen, falls jemand weiterhin Lust hat, von dort aus auf unschuldige Satzzeichen zu ballern.

Martin Oehm hat sich mal wieder in den Maschinenraum begeben, um dort gründlich aufzuräumen. Er hat eine extrem vielversprechende Lösung des Punkte-Problems vorgeschlagen, die ich hiermit zum Testen weitergebe (es muss keine Use-Option gewählt werden oder zusätzlicher Code eingebunden werden):

http://ifiction.pageturner.de/inform7/test/German_3-120416--TEST5.zip

-- Das Topic-Token hört bei einem Punkt auf. (yay!) Das bedeutet, dass standardmäßig am Ende eines jeden Satzes ein Punkt geschrieben werden kann.

-- Es können mehrere Kommandos in einer Zeile verwendet werden, unabhängig davon, ob ein Topic verwendet wurde.


Zitat:
>Frage die Frau nach Ann. Ich möchte mich betrachten.
Ann ist Ihre Schwester. Sie hat als Kind viel Unsinn angestellt.

Gutaussehend wie immer.


-- Es können mehrere Punkte hintereinander geschrieben werden:

Zitat:
>z...
Die Zeit verstreicht.


Bitte probiert diese Version doch mal aus! Wenn sich die bewährt, sind wir in diesem Punkt deutlich besser als das Original.

Ein großes Dankeschön an Martin!

EDIT: Die ersten Tests haben noch keine Probleme aufgezeigt. Genial. Jetzt studiere ich den neuen Code genauer und versuche zu verstehen, was Martin da gemacht hat.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 2 von 2
Gehe zu Seite Zurück  1, 2
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05