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.

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 />

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!