08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

8.4. WEITERE BEOBACHTUNGEN 175<br />

Die Methode der Konstruktorfunktionen ermöglicht die gleichzeitige Verwendung der zu den beiden<br />

Sätzen von Konstruktorsymbolen gehörenden Konstruktorfunktionssymbole.<br />

Beispiel 8.11 Erweiterte Konstruktorfunktionssymbole für ganze Zahlen<br />

Zu den Regeln des Beispiels 8.6 kommen noch<br />

minus(Zero) → Zero<br />

minus(Succ(x)) → Pred(minus(x))<br />

minus(Pred(x)) → Succ(minus(x))<br />

Die gleichen Konstruktorfunktionssymbole können auch bei einem Aufbau der ganzen Zahlen aus<br />

C = {Zero (0) ,Succ (1) ,Minus (1) } verwendet werden.<br />

Beispiel 8.12 Konstruktorfunktionen und ganze Zahlen, II<br />

pred(Zero) → Pred(Zero)<br />

pred(Succ(x)) → x<br />

pred(Minus(x)) → Minus(Succ(x))<br />

zero → Zero<br />

succ(Zero) → Succ(Zero)<br />

succ(Succ(x)) → Succ(Succ(x))<br />

succ(Minus(Succ(x))) → Minus(x)<br />

minus(Zero) → Zero<br />

minus(Succ(x)) → Minus(Succ(x))<br />

minus(Minus(x)) → x<br />

Auf diese Weise ist also eine vollständige Trennung der Erzeugung und der internen Darstellung von<br />

Datenelementen möglich. Allerdings werden die Konstruktoren nach wie vor beim Patternmatching<br />

verwendet. In [Bur&Cam93] sind daher mehrere Sätze von Konstruktorsymbolen zur gleichzeitigen<br />

Verwendung für einen Datentyp vorgesehen. Nur einer von diesen dient tatsächlich dem Aufbau<br />

und damit der internen Darstellung der Datenelemente. Für jeden anderen Satz von Konstruktorsymbolen,<br />

View genannt, wird jedoch eine Abbildung von der internen Darstellung in die View<br />

definiert, so daß alle Views zum Patternmatching verwendet werden können. Diese Abbildung ist<br />

beliebig und kann durchaus eine Projektion sein.<br />

Durch die Views werden Patternmatching und interne Darstellung vollständig voneinander getrennt<br />

und somit das Prinzip der geheimen internen Darstellung eines abstrakten Datentyps gewahrt.<br />

Allerdings würden die Views eine Neudefinition der Semantik erfordern.<br />

Alle hier vorgestellten Konzepte beruhen mehr oder weniger auf der Verwendung von Normalformen.<br />

Es existieren jedoch nicht-freie Datentypen, die prinzipiell keine Normalformen zulassen. Das<br />

wichtigste Beispiel hierfür sind Mengen. Elemente einer Menge sind prinzipiell ungeordnet, aber in<br />

jeder Art von Normalform wären sie geordnet. Die schlichte Festlegung einer beliebigen Ordnung<br />

ist nicht möglich, da nicht zu jeder Sorte von Mengenelementen überhaupt eine Ordnung existieren<br />

muß, und vor allem auf diese Weise nicht mehr Mengen, sondern geordnete Mengen (geordnete<br />

Listen ohne mehrfache Elemente) spezifiziert würden. Mengen sind also nicht-freie Datentypen, die<br />

mit den vorgestellten Konzepten nicht spezifizierbar sind.<br />

✷<br />

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!