Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
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 />
✷