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.
Kapitel 8<br />
Nicht-freie Datentypen<br />
Wir haben in den bisherigen Kapiteln die Syntax und insbesondere die Semantik einfacher konstruktorbasierter<br />
funktionaler Programmiersprachen definiert und untersucht. Mit diesen Programmiersprachen<br />
sind jedoch nur freie (konstruktorbasierte) Datentypen spezifizierbar, bzw. unsere<br />
ς-Datentypen sind nur Erweiterungen freier (konstruktorbasierter) Basisdatentypen. Freiheit<br />
bedeutet hierbei, daß jeder syntaktische Konstruktorgrundterm ein eindeutiger Bezeichner eines<br />
semantischen Datenelements ist 1 , formal:<br />
∀t, t ′ ∈ TC. t = t ′ =⇒ [[t]] P,ς = [[t ′ ]] P,ς.<br />
Wie wir in Beispielen gesehen haben, sind damit durchaus viele wichtige Datentypen leicht und auf<br />
natürliche Weise spezifizierbar.<br />
Beispiel 8.1 Freie Datentypen<br />
Wahrheitswerte (Boolean): C = {False (0) ,True (0) }<br />
Zeichen (Character): C = { ′ A ′(0) , ′ B ′(0) , ′ C ′(0) , . . .}<br />
Natürliche Zahlen: C = {Zero (0) ,Succ (1) }<br />
Listen: C = {Nil (0) ,Cons (2) }<br />
Bäume: C = {Null (0) ,Node (3) }<br />
Für andere Datentypen wie ganze Zahlen, rationale Zahlen, Fließkommazahlen, geordnete Listen<br />
und Mengen ist dies dagegen nicht möglich.<br />
Natürlich lassen sich diese Datentypen durchaus durch Konstruktoren aufbauen. So sind zum Beispiel<br />
die ganzen Zahlen durch C = {Zero (0) ,Succ (1) ,Pred (1) } erzeugbar. Pred(t) bezeichnet den<br />
Vorgänger der durch t bezeichneten Zahl, und wir erhalten<br />
. . . , Pred(Zero) ≃ −1, Zero ≃ 0, Succ(Zero) ≃ 1, Succ(Succ(Zero)) ≃ 2, . . .<br />
Aber TC enthält auch Succ(Pred(Zero)),Pred(Succ(Zero)),Succ(Succ(Pred(Pred(Zero)))), . . ..<br />
Offensichtlich sollten all dieses letzteren Terme ebenfalls die Zahl 0 bezeichnen. In den ς-Datentypen<br />
1<br />
Im algebraischen Sinne sind die Basisdatentypen, die aus dem Träger der ς-Datentypen, TC,ς, und den Konstruktoroperationen<br />
bestehen (wir ignorieren die Hilfsoperationen), natürlich nicht absolut frei relativ zu {⊥}. Immerhin<br />
ist jedoch die Konstruktorgrundtermalgebra TC absolut initial, und T ∞<br />
C,⊥ ist initial in Alg ∞<br />
C,⊥.<br />
✷