IF-Forum

» IF-Forum - Autorencafé - Schreiben! - 'mein' nicht immer gleich 'meinen'
AntwortenNeues ThemaNeue Umfrage

'mein' nicht immer gleich 'meinen'

Geschrieben um 14:56 am 04.04.2005 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Hallo,

wie angekündigt, habe ich mich mal mit dem Problem beschäftigt.

Einen Ansatz für eine generelle Lösung kann ich nicht bieten, da die Descriptors ohne Informisierung geprüft werden müssen um genderspezifische Eigenschaften zu prüfen (also 'meine' ist nicht gleich 'meinen') aus diesem Grund werden Descriptors auch nicht Imformisiert, muß man also auch z.B. 'meinen' und 'meinem' zur Nameproperty hinzufügen.

Die derzeitige "Lösung" ist, bei meinen Ball 'meinen' als name aufzunehmen, dann gibt es aber ein Problem. Durch die Reihenfolge des Parsens wird zuerst nach Descritporen gesucht (C), danach der Objectname geparst (D):



!       object lists and break down others into elementary tokens

!  (B)  Begin parsing an object list

!  (C)   Parse descriptors (articles, pronouns, etc.) in the list

!  (D)   Parse an object name

!  (E)  Parse connectives ("and", "but", etc.) and go back to (C)

!  (F)  Return the conclusion of parsing an object list

! ----------------------------------------------------------------------------```

(Übrigens frage ich mich, ob man die doch hier schon gelgliederte "Endlos"-Funktion nicht hätte aufteilen können, schätze aber aufgrund der vielen Sprungmarken nicht ganz einfach)

'Mein' soll als descriptor darauf hinweisen, dass es sich um ein Objekt in meinem Inventar handelt, d.h. alle Objekte außerhalb meines Inventares fliegen raus.

Gibt es keinen Treffer, wird nach Objektnamen weitergeparst.

Was also nie zustande kommen kann ist, dass beide gleichzeitig disambiguisiert werden, weil einmal der Descriptor und einmal der Name zum Tragen kommt. Das hört sich jetzt umständlich an, aber folgendes Beispiel demonstriert das: Mein Ball liegt auf dem Boden, den fremden habe ich im Inventar.

**Frotz:**
> Du siehst hier einen fremden Ball und einen eigenen Ball.

>x meinen ball

Es ist dein eigener Ball.

>nimm fremden ball

Du trägst den fremden Ball jetzt bei dir.

>x meinen ball

Es ist ein Ball von anderen Kindern.

>nimm meinen ball

Du hast diesen schon.

>nimm eigenen ball

Du trägst den eigenen Ball jetzt bei dir.

Am Besten müßte ">X MEINEN BALL" die Frage welchen ich denn meine aufrufen, da "Mein Ball" so heißt und der "fremde Ball" in meinem Inventar ist. Passiert aber nicht, da sie nicht gemeinsam Adjudicate() zum Disambiguisieren durchlaufen.

Wenn sich Inform schon entscheidet, dann sollte es eigentlich für meinen Ball sein, da in meinen Augen der Name Vorrang haben sollte. Das geht aber nicht, da Descriptors zuerst geprüft werden.

Man sollte sich also überlegen, ob man entweder mit der standartisierten Form des Descriptors arbeiten möchte (dann muß man gar nichts tun), oder aber ein Spiel hat, in dem der Besitz generell festgelegt ist wie z.B. mein Haus, mein Auto, mein Schiff. In diesem Fall in german.h den "Mein-Block" als Descriptor auskommentieren und meine Objekte mit dem Namen 'mein' versehen.

Den Weg über ChooseObjects zu gehen und mit Attributen zu arbeiten habe ich verworfen, da die Descriptors in jedem Fall auskommentiert werden müssen da sie immer VOR dem Objekt geparst werden.

Tja, eigentlich nicht viel erreicht, habe aber dafür wieder ein bisschen mehr dazugelernt :-)

Grüße

Christof

EDIT:

**Martin:**
> Interessant ist dort die Routine ParseDescriptor, mit der man eigene descriptors definieren kann: 

@Martin:

Das scheint eine praktische Funktion zu sein, ich kenne mich nur mit Platypus überhaupt gar nicht aus.

Müßte für z-Code in der Routine dann nicht den Variablen (

indef_possambig

indef_owner

indef_cases   usw...) Werte zugewiesen werden? Dann würde es nämlich genügen, am Anfang von Descriptors()  folgendes einzufügen:

```switch (ParseDescriptors(wd)){

       1: return true; ! Objekt akzeptiert

      -1: return false; ! Objekt abgelehnt

      } ! keine entscheidung getroffen (=0), Descriptors wird weiter ausgeführt```

ParseDescriptors müßte die Variablen mit Leben füllen und einen entsprechenden Wert zurückliefern - oder ist es nicht ganz so einfach?
Geschrieben um 17:03 am 11.05.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Kris:

Hähä, dachte ich, schnell mal alle 'mein's und 'dein's entfernt und losgelegt:

Zum Thema 'mein' und 'dein' noch ein Nachtrag: Im Infor FAQ wird eine Möglchkeit beschrieben, 'mein' nicht als descriptor, sondern als Anzeige des Eigentümers zu interpretieren. Ich denke mal, das müsste auch auf Deutsch gehen.

Geschrieben um 11:06 am 12.05.2005 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Ha!

Vielen Dank!

Ich habe das mal ausprobiert und es funktioniert:



      with name 'ball' 'gummiball' 'bunten',

       adj "bunt",

       description "Es ist ein stinkmnormaler bunter Gummiball.",

       dekl 1,

   has male;

   

Object Ball1 "Gummiball" raum

  with name 'ball' 'gummiball' 'blau' 'mein' 'meinen',

       adj  "blau",

       parse_name [;

              if (parser_action == ##TheSame) return -2;

              if (indef_type & MY_BIT) wn--;

              return -1;],

       description "Es ist dein blauer Gummiball.",

       dekl 1,

   has male;```

Man muß allerdings 'mein' und 'meinen' als name bennen, da es nicht informisiert wird - Endungen werden nicht auf MEIN reduziert.

Es ist zwar fraglich, ob ich ">X DIE BLÄTTER MEINER BLUME" ebenso eingebe wie ">X MEINE BLUME", dennoch müssen alle möglichen Formen als name vorkommen die ein Spieler eingeben kann (wenn sie erkannt werden sollen) . Ich konnte keine Probleme feststellen, weiß aber, dass es schwerwiegende Identifikationsprobleme geben kann wenn man bei einem Objekt die Endungen, die eigentlich abgeschnitten werden, mitbenannt werden. (siehe [dieses Thread ](http://forum.ifzentrale.de/viewtopic.php?t=658))

Wer damit arbeitet, sollte deshalb mal ein genaues Auge darauf werfen.

Grüße

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