IF-Forum

» IF-Forum - Autorencafé - Schreiben! - deform: Pronomen
AntwortenNeues ThemaNeue Umfrage

deform: Pronomen

Geschrieben um 10:20 am 21.01.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556


    has male

    with name 'schrank' 'schraenkchen' 'n.'```

B SCHRANK setzt korrekt "er" und "ihn". B SCHRAENKCHEN hat keinerlei Auswirkungen auf die Pronomen.

Ist schonmal jemand über das Problem gestolpert? Oder liegt meinerseits ein Denkfehler vor?
Geschrieben um 14:35 am 21.01.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Ich kann das Verhalten hier nicht reproduzieren:

Das Testspiel (Z5):

pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

"er": der Schrank

"sie": die Decke

"es": nicht gesetzt

"ihn": der Schrank

"ihm": der Schrank

"ihr": die Decke

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Schrank

"ihm/r": der Schrank

u schränkchen

Du siehst nichts Besonderes an dem Schrank.

pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

"er": der Schrank

"sie": die Decke

"es": der Schrank

"ihn": der Schrank

"ihm": der Schrank

"ihr": die Decke

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Schrank

"ihm/r": der Schrank

Funktioniert. Für den Schrank habe ich deinen Code verwendet.

EDIT: Oder meintest du die Ausgabe der Pronomen? Da greift der Changing Gender nämlich nicht. Er wird vor der Ausgabe zurückgesetzt.

Geschrieben um 17:55 am 21.01.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556

Spannend. Tatsächlich kann ich das korrekte Verhalten bei einem Minimalspiel auch nachvollziehe, das Problem taucht also nicht auf. Ich werde wohl nochmal einen Tag investieren müssen zwecks Isolierung. Vielen Dank schonmal fürs Testen!

Geschrieben um 11:28 am 22.01.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556

Es liegt nicht am Code, sondern an der Größe. Wenn ich ein Drittel der Objekte einfach rauslasse ist alles in Ordnung. Ich habe den exakten Punkt identifiziert: Wenn ich von dan ein weiteres Objekt hinzufüge oder einem bestehenden Objekt zwei neue Worte zum Namen hinzufüge, tritt der Fehler auf.

Ich kompiliere mit der s-Flag und da ist keiner der Werte kritisch an einer Grenze. Die mir interessant scheinenden Memory-Compilervariablen (MAX_DICT_ENTRIES, MAX_STATIC_DATA) lösen die Sache ebenfalls nicht. Bin ratlos, was ich weiter vrrsuchen könnte.

Nach Glulx zu kompilieren löst es, aber möchte ich eigentlich nicht. Das Spiel passt knapp in Z5! Z8 wäre in Ordnung, aber hat auch den Bug. Ich kenne mich zu wenig mit den Unterschieden zwischen Z und Glulx aus, um gezielt weiterzusuchen.

Geschrieben um 12:39 am 22.01.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Was passiert, wenn du in German.h die CG-Puffergröße von 8 z.B. auf 16 anhebst? (Nur mal so als Experiment.)



Constant MAX_CG_STACK = 16;```
Geschrieben um 13:45 am 22.01.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556

Leider keine Verbesserung.

Geschrieben um 15:27 am 22.01.2015 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 706

Hast du es schon mit einer anderen Compiler-Version (oder hier) versucht? Auch wenn es unwahrscheinlich anmutet, kann im neuen I6.33 ein Bug stecken. Da der Fehler bereits in der englischen Version aufscheint, darf die Library als Fehlerquelle versuchsweise mal ausgeschlossen werden.

-----
Geschrieben um 15:51 am 22.01.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556

Inform 6.32 verhält sich identisch. Auf Englisch tritt der Fehler logischerweise nicht auf, weil es bei normalen Objekten gar keinen Genus gibt.

Geschrieben um 17:16 am 22.01.2015 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 706

Hannes:

Inform 6.32 verhält sich identisch. Auf Englisch tritt der Fehler logischerweise nicht auf, weil es bei normalen Objekten gar keinen Genus gibt.

Die 6.32-Downloads hab ich online gar nicht mehr gefunden, wohin ist das denn entschwunden??? Da es in den Fingern juckt, hab ich ein Perlskript geschrieben, das einen Quelltext mit 500 Objekten mit abweichenden Synonymen für n/f erzeugt und mit 6.33 resp. 6.30 kompiliert, der Fehler tritt beides mal auf. Durch Intervallschachtelung kam raus, dass das Pronomen-Handling bei 431 Objekten mit je 4 name-Einträgen noch geht, beim 432. dann nicht mehr (plus Beiwerk wie Raum). Im Englischen können "it/them/him/her" verwendet werden, was in der englischen Lily-Version nicht immer zuverlässig ging.

-----
Geschrieben um 17:25 am 22.01.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556

Keine Ahnung, ich hab 6.32 einfach noch für genau solche Fälle auf dem System. Danke für die Tests - scheint dann ja wohl mindestens seit 10 Jahren so drin zu sein.

Ich habe als Übergang 193/194 Objekte ausgemacht - allerdings mit durchschnittlich sehr viel mehr Namen. DEr Zusammenhang ist allerdings nicht linear (ein Name gegen ein Objekt). Ein zusätzliches Objekt wiegt mehrere Namen auf.

Im Englischen tritt es natürlich bei Singular-/Pluralunterscheidung auf. Aber da gibt es ja auch keine Behandlung diesbezüglich, insofern ist es dort kein Bug, sondern ein fehlendes Feature.

Geschrieben um 21:38 am 22.01.2015 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 706

Zur Pronomentabelle: Da hakt wohl eine Konstante bei etwa 1.700 Wörterbucheinträgen, die deform vermurksen könnte. Ich weiß es einfach nicht und poste einfach mal das Beipliel "Heidi" aus dem IBG mit 433 zusätzlichen Objekten "objxyz" mit xyz=0 bis 432, wobei die mit "x mobjxyz" als männliches und "fobjxyz" als weibliches Synonym jeweils mit mit "f"- und "m"-Beginn angesprochen werden können. Ein Ausstieg aus dem Pronomen-Handling ist sicher nicht im Sinne der Erfinder, egal wie viele Objekte ein Spiel beheimatat. Kompiliert wurde mit I6.33 und I6.30, die identische Ergebnisse liefern: Ab Objekt 432 ist Schluss mit dem zu erwartendem Pronomen-Handling, auszuprobieren am Ende der Objektliste mit "!!!". Ich hab das übrigens auch mit dem englischen Versionen Lib 6/11 und 6/12beta ausprobiert, was super funktioniert ("it" zumindest). Die undokumentierte Konstante MANUAL_PRONOUNS spielt dabei keine Rolle. Hier die I6-Datei:

http://forum.ifzentrale.de/pub/Test.inf

-----
Geschrieben um 23:47 am 06.05.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Ist zwar schon ein Weilchen her, aber ich habe gerade gesehen, dass die Changing-Gender-Tags nicht ganz zuverlässig abgefragt werden: In parserm.h in der Routine WordInProperty() wird darauf gesetzt, dass die Adressen der Tags > 255 sind. Die können aber durch Überlauf auch ab und zu negativ werden, und dann funktioniert das mit der Abfrage nicht mehr.

Hannes, proc, versucht doch mal bitte diese Variante der Routine WordInProperty(), falls das jetzt noch akut ist:



    k = obj.∝ l = (obj.#prop)/WORDSIZE;

    for (m = 0 : m < l : m++)

        if (wd == k-->m) {

         g = IsGenderAttribute(k-->(m+1));

            if (m < l-1 && g) {

                GenderNotice(obj, g);

         }

            rtrue;

        }

    rfalse;

];```

Damit scheint es hier zuverlässig zu laufen. Die Routine StringInProperty() müsste wohl auch entsprechend geändert werden, aber die wird in der offiziellen deform-Version gar nicht benutzt, glaube ich.
Geschrieben um 12:58 am 08.05.2015 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 706

ChristianB:

falls das jetzt noch akut ist:

Also sowas ist ja wohl in alle Ewigkeit akut...

Ich habs jetzt mit oben verlinktem Beispiel mit I6.33 und 500 Objekten kompiliert ausprobiert:


Objekt: obj1 (n), mobj1 (m), fobj1 (f).

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

    "er": nicht gesetzt

    "sie": nicht gesetzt

    "es": das obj1

    "ihn": nicht gesetzt

    "ihm": das obj1

    "ihr": nicht gesetzt

    "ihnen": nicht gesetzt

    "damit", "darauf", usw.: das obj1

    "ihm/r": das obj1

>u mobj2

Objekt: obj2 (n), mobj2 (m), fobj2 (f).

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

    "er": das obj2

    "sie": nicht gesetzt

    "es": das obj2

    "ihn": das obj2

    "ihm": das obj2

    "ihr": nicht gesetzt

    "ihnen": nicht gesetzt

    "damit", "darauf", usw.: das obj2

    "ihm/r": das obj2

>u fobj3

Objekt: obj3 (n), mobj3 (m), fobj3 (f).

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

    "er": das obj2

    "sie": das obj3

    "es": das obj3

    "ihn": das obj2

    "ihm": das obj3

    "ihr": das obj3

    "ihnen": nicht gesetzt

    "damit", "darauf", usw.: das obj3

    "ihm/r": das obj3

Funktioniert mit dem Patch an sich super, unbefriedigend ist nur, dass "es" und "ihm" offenbar immer unabhängig vom Genus auf das letzte angesprochene Objekt gesetzt werden. Da gäbe es noch etwas Verbesserungspotential. Immerhin funktioniert schon einiges mehr als zuvor, Danke!!!

-----
Geschrieben um 20:54 am 08.05.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

proc:

... unbefriedigend ist nur, dass "es" und "ihm" offenbar immer unabhängig vom Genus auf das letzte angesprochene Objekt gesetzt werden.

Du meinst, jedes zuletzt angesprochene Objekt, egal, ob Männlein oder Weiblein, bekommt auch noch die Pronomen fürs Neutrum verpasst? Das kann ich hier momentan nicht nachvollziehen:

Das Testlabor:

Testlabor

Hier wird getestet, was das Zeug hält.

Du siehst hier einen Schrank.

pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

"er": der Schrank

"sie": nicht gesetzt

"es": nicht gesetzt

"ihn": der Schrank

"ihm": der Schrank

"ihr": nicht gesetzt

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Schrank

"ihm/r": der Schrank

u schrank

Du siehst nichts Besonderes an dem Schrank.

pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

"er": der Schrank

"sie": nicht gesetzt

"es": nicht gesetzt

"ihn": der Schrank

"ihm": der Schrank

"ihr": nicht gesetzt

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Schrank

"ihm/r": der Schrank

u schränkchen

Du siehst nichts Besonderes an dem Schrank.

pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

"er": der Schrank

"sie": nicht gesetzt

"es": der Schrank

"ihn": der Schrank

"ihm": der Schrank

"ihr": nicht gesetzt

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Schrank

"ihm/r": der Schrank

Wenn man dann wieder SCHRANK sagt, bleibt im nächsten Zug aber auch das Pronomen für "es" bestehen. Die pronomen werden additiv ergänzt, bis sie irgendwann mit einem aktuelleren Objekt verknüpft werden.

Geschrieben um 10:47 am 09.05.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 556

Sieht für mich bestens aus! Wenn man einen Alias referenziert, wird gleichzeitig immer auch das Pronomen des Hauptgeschlechts gesetzt, also im Eingangsbeispiel:

B SCHRAENKCHEN setzt auch "ER" (von "SCHRANK").

Das finde ich aber logisch. Vielen Dank, Christian!

Geschrieben um 11:04 am 09.05.2015 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 706

ChristianB:

Das kann ich hier momentan nicht nachvollziehen:

Ja, etwas verwirrend so dass ich es nochmal mit Schränken nachvollzogen habe. Es geht wohl um Genusangaben bei Synonymen. Ich habe jetzt mal vier Schränke (male) mit zusätzlichen Synonymen für alle identisch in folgender Art ausprobiert, was dann seltsames Pronomen-Verhalten zeigt. Vielleicht ist das ja auch ein Denkfehler oder falscher Code, ich zeig einfach mal alles:



   with name 'schrank' 'schraenkchen' 'n.' 'kommode' 'f.',

   description "Ein Schrank.",

   has male;```

Dabei wird 1) nur bei "schränkchen" das es-Pronomen gesetzt, bei den identisch angelegten anderen Objekten wie "Metallschränkchen" (freilich mit "ae" in den Synonymen) nicht. Das verwirrt mich etwas. 2) ist mir dabei aufgefallen, dass die Pronomentabelle bei Ansprache über Synonyme auch die Pronomen für den Hauptgender setzt, so dass sich z.B. in der Abfolge "u schrank / u Holzkommode / öffne ihn" das "ihn" dann auf die Holzkommode bezieht und nicht mehr auf den Schrank, was korrekt wäre. Hier ein Test-Log:

**Beispiel:**
> >u holzschränkchen

Ein Holzschrank.

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

**"er": der Holzschrank**

"sie": nicht gesetzt

**"es": nicht gesetzt**

"ihn": der Holzschrank

"ihm": der Holzschrank

"ihr": nicht gesetzt

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Holzschrank

"ihm/r": der Holzschrank

>u metallkommode

Ein Metallschrank.

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

**"er": der Metallschrank**

"sie": der Metallschrank

**"es": nicht gesetzt

"ihn": der Metallschrank

"ihm": der Metallschrank**

"ihr": der Metallschrank

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Metallschrank

"ihm/r": der Metallschrank

>u plastikschränkchen

Ein Plastikschrank.

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

**"er": der Plastikschrank**

"sie": der Metallschrank

**"es": nicht gesetzt

"ihn": der Plastikschrank

"ihm": der Plastikschrank**

"ihr": der Metallschrank

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Plastikschrank

"ihm/r": der Plastikschrank

>u schränkchen

Ein Schrank.

>pronomen

Die Pronomen beziehen sich im Moment auf Folgendes:

"er": der Schrank

"sie": der Metallschrank

**"es": der Schrank**

"ihn": der Schrank

"ihm": der Schrank

"ihr": der Metallschrank

"ihnen": nicht gesetzt

"damit", "darauf", usw.: der Schrank

"ihm/r": der Schrank

Handelt es sich um einen Denkfehler, um Codemurks oder um irreführendes Pronomen-Verhalten? Es ist übrigens unabhängig von der Objektzahl identisch, die Ausgaben bei 504 Objekten stimmen mit denen bei 4 Objekten überein. Der Objektzahlfehler dürfte also behoben sein.
-----
Geschrieben um 11:58 am 09.05.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Ahh, ich denke, dafür ist das 9-Stellen-Limit der Z-Code-Vokabeln verantwortlich, welches Martin Oehm übrigens in Zeta elegant auf 18 erweitert hat, indem dort zwei Wörterbucheinträge für eine Vokabel verwendet werden.

Von 'holzschrank' landen die ersten 9 Stellen im Wörterbuch: 'holzschra'. Und von 'holzschraenkchen' auch. Das bedeutet, dass der Parser den Holzschrank nicht vom Holzschränkchen unterscheiden kann, und sich für das erste passende Synonym in der name-Property entscheiden wird.

Abhilfe schafft da die Verwendung des Compound-Heads-Mechanismus. Man legt eine Tabelle an:



    "holz" 0

    "metall" 0

;```

Der Wert hinter den Strings ist eine bislang nicht benutzte Zahl, die man einfach bei 0 lassen kann.

Jetzt kann man schreiben:

```name 'holz-' 'schrank' 'schraenkchen' 'n.'```

oder

```name 'metall-' 'schrank' 'schraenkchen' 'n.'```

(Den Bindestrich am Ende der Vokabel nicht vergessen!) Damit werden HOLZSCHRANK/HOLZSCHRÄNCKCHEN und METALLSCHRANK/METALLSCHRÄNKCHEN gleichermaßen verstanden und auch vom Parser unterschieden.
Geschrieben um 12:12 am 09.05.2015 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 706

ChristianB:

Ahh, ich denke, dafür ist das 9-Stellen-Limit der Z-Code-Vokabeln verantwortlich

ja, das wars, funktioniert mit CompoundHeads super! Pronomen für den Hauptgender zu setzen ist okay, ich hatte mich beim Herumspielen nur etwas gewundert. Danke für die Korrektur!!!

-----
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz