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.
Um derartige Semantiken zu finden, betrachten wir in Kapitel 4 die zwei in funktionalen Programmiersprachen<br />
allgemein verwendeten Semantiken: die call-by-value und die call-by-name Semantik.<br />
Wir definieren jeweils sowohl eine operationelle Semantik, die auf der Reduktion der Termersetzungssysteme<br />
beruht, als auch eine denotationelle Semantik. Bei letzterern handelt es sich um auf<br />
ω-vollständigen Halbordnungen und dem Fixpunktsatz von Tarski beruhende Fixpunktsemantiken.<br />
Für die call-by-value Semantik erweist sich auch die Übereinstimmung der operationellen und der<br />
denotationellen Semantik als relativ einfach beweisbar.<br />
Diese Betrachtungen führen uns in Kapitel 5 zu dem Konzept der erzwungenen Striktheit und<br />
den allgemeineren ς-Semantiken. Die call-by-value und die call-by-name Semantik sind nur zwei,<br />
allerdings ausgezeichnete Vertreter dieser ς-Semantiken. Wir definieren für jede ς-Semantik eine (denotationelle)<br />
Fixpunktsemantik und zwei (operationelle) Reduktionssemantiken, wobei die eine Reduktionssemantik<br />
mehr von theoretischem Interesse ist, während die zweite implementationsnäher<br />
ist. Anschließend beweisen wir die Übereinstimmung aller drei Semantiken.<br />
In Kapitel 6 stellen wir Beziehungen zu anderen Semantikarten her. Im Kalkül der Termersetzungssysteme<br />
und der algebraischen Spezifkationen ist das initiale Modell (Quotientenmodell) als<br />
semantische Grundlage sehr beliebt. Wir begründen, warum dieses initiale Modell für die Semantik<br />
unserer funktionalen Programmiersprachen ungeeignet ist. Wir zeigen jedoch auch einen Zusammenhang<br />
zwischen dem initialen Modell und den ς-Semantiken auf. Deklarative Semantiken<br />
beruhen auf dem Erfüllbarkeits- und Modellbegriff der Logik. Wir stellen fest, daß von unseren<br />
ς-Semantiken allein die call-by-name Semantik deklarativ definierbar ist. Durch die Verwendung<br />
partieller Algebren läßt sich aber auch die call-by-value Semantik deklarativ formulieren.<br />
Wir haben zwei Programmarten definiert, eine, die Patternmatching verwendet, und eine, die<br />
zusätzliche Hilfsfunktionen einführt. Es stellt sich somit die Frage, ob diese beiden gleich mächtig<br />
sind und sich Programme der einen Art in Programme der anderen Art semantikerhaltend effektiv<br />
übersetzen lassen. In Kapitel 7 stellen wir fest, daß Patternmatching echt mächtiger als die<br />
Hilfsfunktionen ist. Die das Scheidekriterium darstellende Eigenschaft der Sequentialität gibt uns<br />
weitere Einblicke in die Semantik der Programmiersprachen und auch Anregungen für effizientere<br />
Reduktionssemantiken.<br />
Mit den ς-Semantiken sind nur sogenannte freie Datentypen direkt darstellbar. In Kapitel 8<br />
beschäftigen wir uns mit Semantiken für nicht-freie Datentypen und zeigen einige dabei auftretende<br />
Probleme auf. Daraufhin stellen wir eine Programmiermethode vor, die eine adäquate Darstellung<br />
nicht-freier Datentypen auch bei Verwendung der ς-Semantiken gestattet.<br />
Schließlich fassen wir in Kapitel 9 die erzielten Erkenntnisse kurz zusammen. Außerdem weisen wir<br />
noch auf interessante weiterführende Fragestellungen und Ideen hin.<br />
An dieser Stelle möchte ich all jenen danken, die mich durch Vorschläge, Kommentare, Hinweise<br />
auf Literatur und auch Ratschläge für das Schreiben mit L ATEX unterstützt haben. Insbesondere<br />
danke ich diesbezüglich meinem Betreuer Thomas Noll.<br />
7