Forum moved to if-forum.org
Autor Nachricht
<  I7: Kein Changing Gender bei gleichen Objekten derselben Art
ChristianB
BeitragVerfasst am: Di, 14 Sep 2010 - 16:45  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Ich bin mir ziemlich sicher, dass wir das Thema schon in I7 Version 5Z71 vom Tisch hatten, aber nun ist es wieder da. Folgendes Beispiel:

"Alle Tassen im Schrank"

Include German by Team GerX.

A thing is usually privately-named. A room is usually privately-named.

The Lab is a room. The printed name is "Labor".

The cupboard is a male open container in the Lab, fixed in place. The printed name is "Schrank[-es]". Understand "Schrank" as the cupboard.

A cup is a kind of container. A cup is female. The printed name is "Tasse". The printed plural name is "Tassen". Understand "Tasse" and "Becher [m]" as a cup. Understand "Tassen" as the plural of a cup.

In the cupboard are five cups.

Test me with "u becher / nimm ihn / nimm zwei becher / pronomen".


Der Test ergibt:

Zitat:
>[1] u becher
Die Tasse ist leer.

>[2] nimm ihn
Der Schrank ist fest.

>[3] nimm zwei becher
Tasse: In Ordnung.
Tasse: In Ordnung.

>[4] pronomen
Die Pronomen beziehen sich im Moment auf Folgendes:
"er": der Schrank
"sie": die Tasse
"es": nicht gesetzt
"ihn": der Schrank
"ihm": der Schrank
"ihr": die Tasse
"ihnen": nicht gesetzt
"damit", "darauf", usw.: die Tasse
"ihm/r": die Tasse


Das ist nicht richtig, denn wenn eine der Tassen (oder auch alle Tassen) "Becher" genannt wird, sollen danach die männlichen Pronomen auf eine der Tassen verweisen. Hier läuft also etwas schief, wir finden nur nicht heraus, wo und was.

Wohl keine Lösung, aber ein Hinweis auf die Ursache könnte folgendes Phänomen sein:

Mit nur vier definierten Tassen funktioniert das Beispiel korrekt.

In the cupboard are four cups.

Zitat:
>[1] u becher
Die Tasse ist leer.

>[2] nimm ihn
In Ordnung.

>[3] nimm zwei becher
Tasse: In Ordnung.
Tasse: In Ordnung.

>[4] pronomen
Die Pronomen beziehen sich im Moment auf Folgendes:
"er": die Tasse
"sie": die Tasse
"es": nicht gesetzt
"ihn": die Tasse
"ihm": die Tasse
"ihr": die Tasse
"ihnen": nicht gesetzt
"damit", "darauf", usw.: die Tasse
"ihm/r": die Tasse


Wenn ich den I6-CG-Stack vergrößere, sagen wir mal, ihn von 8 auf 16 verdopple, ...

Code:
Constant MAX_CG_STACK = 16;


... dann funktioniert der CG auch mit bis zu 8 gleichen Tassen. Ab der 9. Tasse geht es dann wieder nicht.

Ob es daran liegt, dass die 2-Pass-Parse-Name einer jeden Tasse das Male-Token zweimal anfasst? Geht etwas mit der Zeigervariable CG_pointer daneben? Oder wird der Genus irgendwo in den Standard-Rules auf anderem Weg zurückgesetzt als in der I6-Routine Gender()? Es bleibt ein Rätsel ...

Vielleicht hat ja jemand eine Idee, woran es liegen könnte?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Fr, 24 Sep 2010 - 23:47  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

OK. Das Problem wurde vorläufig so behoben:

Code:
Include (-
[ BestGuess  earliest its_score best i j;
    earliest = 0; best = -1;
    for (i=0 : i<number_matched : i++ ) {
        if (match_list-->i >= 0) {
            its_score = match_scores-->i;
            if (its_score > best) { best = its_score; earliest = i; }
        }
    }
    #Ifdef DEBUG;
    if (parser_trace >= 4)
      if (best < 0) print "   Best guess ran out of choices^";
      else print "   Best guess ", (the) match_list-->earliest,
          " (", match_list-->earliest, ")^";
    #Endif; ! DEBUG
    if (best < 0) return -1;
    i = match_list-->earliest;

    ! *** Bei identischen Objekten den CG des ersten Objekts
    !     neu setzen, da die Information in CG_buffer mglicherweise
    !     überschrieben wurde (dies geschieht, wenn es mehr als
    !     MAX_CG_STACK/2 identische Objekte gibt).
    for (j = 0 : j < MAX_CG_STACK : j++ ) {
        if ( Identical(i, CG_buffer-->(2*j)) ) {
                 GenderNotice(i, CG_buffer-->(2*j + 1));
                 break;
        }
    }

    match_list-->earliest = -1;
    return i;
];
-) instead of "BestGuess" in "Parser.i6t".

Scheint zu funktionieren.
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 1 von 1
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