Passen Sie eine Version von Hashes der neuen Version von Dictionaries so an, daß sie diese mit Löschen und ungeordnetem Iterieren implementiert. Als Testprogramm eignet sich eine leicht abgewandelte Version von TestHashes.
Halten Sie ab jetzt in allen Lösungen die Programmierkonventionen der Ulmer Oberon-Bibliothek ein, die im Vorlesungsskript abgedruckt sind.
Die Vergleichsoperation für Schlüssel-/Objektpaare soll beim Konstruktor als Parameter angegeben werden. Zweckmäßig ist es, eine solche Vergleichsoperation für den häufig benötigten Fall des einfachen Vergleichs der Schlüssel (per ConstStrings.Compare) gleich mit zur Verfügung zu stellen.
Auch hier empfiehlt es sich, für Testzwecke TestHashes erneut anzupassen.
Gegeben ist ein gerichteter Graph mit eindeutig benannten Knoten. Die von einem Knoten wegführenden Kanten haben ebenfalls (per Knoten eindeutige) Namen. Das Spiel besteht nun darin, den Graphen aus einer Datei einzulesen (siehe Modul UnixFiles) und interaktiv zu traversieren.
Als Namen für Knoten und Kanten seien Zeichenketten ohne "Whitespace" zugelassen. Die Datei kann einen fest vorgegebenen Namen haben und soll aus einzelnen Zeilen bestehen, die jeweils eine Kante des Graphen in der Form Startknoten Kantenname Zielknoten beschreiben.
Beispiel für eine Eingabedatei
Flur sued Wohnzimmer Flur nord Schlafzimmer Schlafzimmer sued Flur Wohnzimmer nord Flur
Die interaktive Sitzung beginnt bei dem Knoten, der zuerst in der Datei genannt wird. Angezeigt wird der Name des aktuellen Knotens und der von dort weiterführenden Kanten. Nach Eingabe eines vorhandenen Kantennamens wird der Knoten, zu dem die Kante führt, der neue aktuelle Knoten, usw. Das Spiel endet mit dem Ende der Eingabe.
Beispiel für eine Sitzung
% graph Flur -> nord -> sued ? nord Schlafzimmer -> sued ? nord ? sued Flur -> nord -> sued ? ^D %
Modularisieren Sie das Programm in der Weise, daß eine separate Abstraktionsebene einen problembezogenen Objekttyp definiert, dessen Operationen von einem einfachen Modul, das die Eingabe interpretiert, benutzt werden.