Autor |
Nachricht |
< Inform7/GerX: "Was meinst du, x oder y?" |
|
Verfasst am:
Fr, 29 Jan 2010 - 4:07
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
Hallo erstmal wieder, nach so langer Zeit. Ich arbeite mich gerade in Inform7 und die deutsche Extension ein - Respekt, die funktioniert schon richtig gut! -, bin dabei allerdings auf ein kleines Problem gestoßen und bin nicht sicher, obs an mir oder an der Library liegt.
Folgender Beispielquelltext...
Code: | Include German by Banbury & Christian Bluemke.
Kanzleramt is a room.
Gerd is a man. He is here.
Understand "kanzler" as Gerd.
Helmut is a man. He is here.
Understand "kanzler" as Helmut. |
führt bei mir zu diesem Ergebnis:
Zitat: | Kanzleramt
Du siehst hier Gerd und Helmut.
>u kanzler
Was meinst du, Gerd oder Helmut?
|
Ich hätte als Antwort eher "Wen meinst du...?" erwartet, also Miscellany 45 statt 46.
Gibt's ne Möglichkeit, das zu bekommen?
Viele Grüße, Chris _________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
Fr, 29 Jan 2010 - 6:20
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Hallo zurück!
ChrisW hat folgendes geschrieben: | Ich hätte als Antwort eher "Wen meinst du...?" erwartet, also Miscellany 45 statt 46. |
Hmmm. In der Routine NounDomain() gibt es zwei Zeilen (4573 f.), die das eigentlich richtig ausgeben sollten:
Code: | if (context==CREATURE_TOKEN) L__M(##Miscellany, 45);
else L__M(##Miscellany, 46); |
Warum das nicht klappt, muss ich mal näher ergründen. Das Problem existiert in deform aber auch -- vielleicht hat Martin da eine Idee. Bei der LM für ##Miscellany, 49 gab's auch Probleme, da habe ich aber schon was nicht so ganz Elegantes reingemogelt. Wie man das in diesem neuen Fall retten könnte, will mir jetzt gerade nicht einfallen.
Edit: Das Problem ist offenbar noch ursprünglicher, denn auch im englischen Original funktioniert das nicht:
Mein englisches Testspiel hat folgendes geschrieben: | Kanzleramt
You can see Gerd and Helmut here.
>x kanzler
Which do you mean, Gerd or Helmut? |
Nicht gut. Eigentlich sollte es "Who do you mean ... " heißen.
Edit 2: So wie es aussieht, wird der Creature_Token-Kontext nur bei Konversation gesetzt. Bei allen anderen Aktionen wird das ignoriert. Der Parser müsste eigentlich gucken, ob beide Objekte animate sind und wenn ja, die Wen-Frage stellen. Wenn nur eines von den Objekten unbelebt ist, kommt das vielleicht etwas merwürdig rüber:
>u kanzler
Wen meinst du, Helmut oder den Weißwein?
Du könntest Dich ja vorerst mit einer neuen Disambiguisierungs-Regel behelfen (was ja sowieso immer ganz nett ist für den Spieler):
Does the player mean examining Helmut: it is very unlikely.
Viele Grüße,
Christian |
|
|
|
|
|
Verfasst am:
Fr, 29 Jan 2010 - 9:02
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
ChristianB hat folgendes geschrieben: | Warum das nicht klappt, muss ich mal näher ergründen. |
Inform schaut offenbar nicht, welche Objekte ausgegeben werden sollen, sondern welches Token untersucht wird. Man könnte die von Christian identifizierten Zeilen gegen eine solche Überprüfung austauschen:
Code: | j = 1; marker = 0;
for (i=1 : i<=number_of_classes : i++) {
while (((match_classes-->marker) ~= i)
&& ((match_classes-->marker) ~= -i)) marker++;
if (match_list-->marker hasnt animate) j = 0;
}
if (j) L__M(##Miscellany, 45); else L__M(##Miscellany, 46);
! if (context==CREATURE_TOKEN) L__M(##Miscellany, 45);
! else L__M(##Miscellany, 46);
|
Im Kanzlerbeispiel funktioniert das ganz gut:
Frotz hat folgendes geschrieben: | >u kanzler
Wen meinst du, Helmut oder Gerd?
>gerd
Du siehst nichts Besonderes an Gerd.
>u gerd
Was meinst du, Gerd oder den Weißwein?
>wein
Ein 2002er Château de Gerd.
|
Vielleicht sollte das in deform Standard sein. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Fr, 29 Jan 2010 - 13:10
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Martin hat folgendes geschrieben: | Vielleicht sollte das in deform Standard sein. |
Gekauft, danke Martin! Ich denke schon, dass das Standard sein sollte (wenn es nicht noch irgendwem gelingt, die Abfrage auszuhebeln).
Ich konnte noch keinen Fehler finden. Die Frage wird auch bei mehr als zwei Kandidaten korrekt gestellt. Zum Ausprobieren für die vielen fleißigen I7-Autoren habe ich das schon mal in die deutsche Erweiterung aufgenommen und eine neue Version hochgeladen.
Vielen Dank an Christoph fürs Finden und Martin fürs Reparieren!
Viel Spaß weiterhin,
Christian |
|
|
|
|
|
Verfasst am:
Fr, 29 Jan 2010 - 13:27
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
Wow, das ging schnell! Vielen Dank euch beiden für die Hilfe!
ChristianB hat folgendes geschrieben: | Du könntest Dich ja vorerst mit einer neuen Disambiguisierungs-Regel behelfen (was ja sowieso immer ganz nett ist für den Spieler):
Does the player mean examining Helmut: it is very unlikely. |
Es geht bei mir auch in der Praxis um Berufsbezeichnungen, die wahrscheinlich vom Spieler kaum verwendet werden, aber falls doch, kann Inform keine fundierte Annahme treffen, wer von beiden gemeint ist. Die Trefferquote wäre fifty-fifty. Solche Fälle gibt's halt auch. :) _________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
So, 31 Jan 2010 - 20:16
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
So, eine neue Version von deform ist oben. Sie enthält nur den oben gezeigten Patch, wer den also schon drin hat, kann sich den Download sparen.
Ich hatte zunächst befürchtet, dass durch diesen Fix auch leere Nachfragen, bei dem Objektangaben ganz fehlen ("Was willst du nehmen?") mit einem "Wem" bedacht werden, aber das ist nicht der Fall - das wird komplett in PrintCommand() gelöst. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
So, 31 Jan 2010 - 23:08
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Super, dankeschön! Ich habe den Fehler an Graham Nelson gemeldet -- bin gespannt, was er dazu sagt. |
|
|
|
|
|
Verfasst am:
Di, 30 März 2010 - 23:15
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Graham Nelson hat Martins Lösungsvorschlag für die nächste Version von I7 übernommen. Im Changelog wird es dann heißen:
Graham Nelson hat folgendes geschrieben: | (c) In this release, the Inform parser changes the default way in which it
asks what is meant by an ambiguous noun such as FROST. It can ask the
question in two different forms:
(1) Who do you mean, Jack Frost or Jill Frost?
(2) Which do you mean, Jack Frost or Jill Frost?
In the past it has used form (1) if the token being parsed was "[someone]", and (2) otherwise. This wasn't very accurate, as plenty of other tokens might expect a person rather than a thing to be typed; but in English, it didn't matter very much, because "which" wasn't too bad for people. In German, it made a bigger difference, and at Christian Blümke's suggestion we are incorporating a change worked out by German Inform users: message (1) is used if all of the possible meanings refer to people, and message (2) otherwise. |
Feine Sache. |
|
|
|
|
|