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.

Die Bedeutung der Basisdatentypen wird in der Theorie der Programmschemata [Ind94] besonders<br />

deutlich, die Schemata von Programmen unabhängig von konkreten Basisdatentypen — dort<br />

Interpretationen genannt — betrachtet.<br />

Funktionale Programmiersprachen besitzen üblicherweise einige Standardbasisdatentypen, beispielsweise<br />

ganze Zahlen (Integer), Fließkommazahlen, Zeichen (Character), logische Werte (Boolean)<br />

und Listen. Um auch Bäume und Matrizen direkt repräsentieren zu können, ermöglichen<br />

moderne funktionale Programmiersprachen wie Miranda und Haskell dem Programmierer, neue,<br />

eigene Basisdatentypen zu definieren: die sogenannten algebraischen Datentypen. Ein algebraischer<br />

Datentyp der natürlichen Zahlen läßt sich folgendermaßen in Miranda definieren:<br />

nat ::= Zero | Succ(nat)<br />

Zero und Succ heißen Konstruktoren, und Konstruktorterme (Zero,Succ(Zero), . . .) bilden den<br />

Träger des algebraischen Datentyps. Der Mechanismus des Patternmatchings ermöglicht nun die<br />

einfache und intuitive Definition von Operationen über dem algebraischen Datentyp.<br />

add(x,Zero) = x<br />

add(x,Succ(y)) = Succ(add(x,y))<br />

mult(x,Zero) = Zero<br />

mult(x,Succ(y)) = add(x,mult(x,y))<br />

Die Konstruktoren repräsentieren die Basisoperationen des algebraischen Datentyps, und das Patternmatching<br />

verbindet zusätzlich eine Testoperation mit einer Komponentenselektion.<br />

Algebraische Datentypen stellen ein äußerst mächtiges Konzept dar, da sie unter anderem die Definition<br />

von Aufzählungstypen, markierten Vereinigungen von Typen und kartesischen Produkten<br />

von Typen ermöglichen. Wie schon das obige Beispiel verdeutlicht, sind selbst die Standardbasisdatentypen<br />

als algebraische Datentypen definierbar (auf Probleme mit den ganzen und Fließkommazahlen<br />

gehen wir später noch ein). Dies rechtfertigt, im weiteren funktionale Programmiersprachen<br />

zu betrachten, die nur algebraische Datentypen besitzen. Die Standardbasisdatentypen lassen sich<br />

schlicht als effizientere Realisierungen entsprechender algebraischer Datentypen auffassen. In dieser<br />

Arbeit untersuchen wir, wie sich für derartige konstruktorbasierte funktionale Programmiersprachen<br />

sinnvoll Semantiken definieren lassen, ähnlich wie dies in [Vui74b] für Funktionsschemata<br />

getan wurde.<br />

Funktionale Programmiersprachen zeichnen sich durch die Möglichkeit aus, daß Funktionen höherer<br />

Ordnung, sogenannte Funktionale, spezifizierbar sind. Wird der λ-Kalkül oder werden Kombinatorsysteme<br />

als Grundlage funktionaler Programme verwendet, so ergeben sich Funktionale praktisch<br />

automatisch. Sie sind jedoch kein notwendiger Bestandteil einer funktionalen Programmiersprache.<br />

Auch bei einem Verzicht auf Funktionale besitzt man noch eine vollwertige (bezüglich der<br />

natürlichen Zahlen mit Sicherheit universelle) Programmiersprache. Es existieren auch reale funktionale<br />

Programmiersprachen wie beispielsweise Sisal, die nur die Spezifikation von Funktionen erster<br />

Ordnung ermöglichen. Auch rekursive Funktionsschemata sind im allgemeinen erster Ordnung<br />

([Ind94]). Die hier zu untersuchende semantische Beschreibung auf Konstruktoren basierender Basisdatentypen<br />

und des Patternmatchings ist unabhängig von dem Vorhandensein von Funktionalen.<br />

Semantiken funktionaler Programmiersprachen höherer Ordnung sind mathematisch aufwendiger,<br />

da aufgrund der Funktionale ein spezifizierter Datentyp keine einfache Algebra mehr sein kann.<br />

Daher beschränken wir uns auf konstruktorbasierte funktionale Programme erster Ordnung.<br />

5

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!