Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
50 KAPITEL 4. DIE STANDARDSEMANTIKEN<br />
Übereinstimmung werden in [Manna74], [Vui74], [Vui74b], [Nivat75], [Dow&Se76], [Ber&Lévy77],<br />
[ADJ77], [Gue81], [Loe&Sie87], [Cou90], [Ind93] und [Ind94] untersucht.<br />
Da unsere Programme mit Pattern aufgrund der Pattern auf den linken Regelseiten keine Funktionsschemata<br />
sind, greifen wir bei den Reduktionssemantiken, wir wir schon gesehen haben,<br />
hauptsächlich auf den Kalkül der Termersetzungssysteme zurück. Schon [O’Do77] verwendet Termersetzungssysteme<br />
als Grundlage operationeller Semantiken funktionaler Programmiersprachen.<br />
Aus den beiden Blickwinkeln — der Funktionsschemata und der Termersetzungssysteme — ergeben<br />
sich widersprüchliche Einordnungen der Hilfsfunktionen der Programme mit Hilfsfunktionen.<br />
Aus Sicht der Funktionsschemata sind sie — da unabhängig vom konkreten Programm — Teil<br />
des Basisdatentyps und damit den Konstruktoren gleichgestellt. Andererseits existieren für sie Termersetzungsregeln<br />
genauso wie für die übrigen Funktionen, und beide werden bei der Reduktion<br />
gleich behandelt. Da wir der Einfachheit halber meistens Programme mit Hilfsfunktionen als spezielle<br />
Programme mit Pattern auffassen, neigen wir mehr dem letzteren Standpunkt zu. Wir wollen<br />
trotzdem nicht vergessen, daß Hilfsoperationen eine Sonderstellung zwischen den Konstruktoroperationen<br />
und den Funktionsoperationen einnehmen.<br />
Schließlich wollen wir noch auf die Beziehung zu algebraischen Spezifikationen hinweisen, für die<br />
[Wir90] eine ausführliche Übersicht darstellt, und die in [Broy&Wir82], [Broy&Wir83], [Gut77],<br />
[Gut&Hor78] und [Thiel84] behandelt werden. Unsere Programme sind ausführbare Spezifikationen.<br />
Daher übernehmen wir von algebraischen Spezifikationen den Standpunkt, ein Programm als<br />
die Spezifikation eines Datentyps, einer Algebra aufzufassen. Der Kalkül der Funktionsschemata<br />
verwendet nämlich nur die Operation eines ausgezeichneten Funktionssymbols als Semantik, wie<br />
wir schon in der Einleitung erwähnten. Die hierarchische Spezifikation eines Datentyps auf der<br />
Grundlage eines anderen Basisdatentyps ist eines der Hauptanliegen der Theorie der algebraischen<br />
Spezifikationen. In Kapitel 6 werden wir unsere Semantiken noch einmal vom Standpunkt der<br />
algebraischen Spezifikationen betrachten und untersuchen.<br />
Nach unseren Überlegungen zur Semantik unserer Programme in 3.3 sind wir jetzt auf der Suche<br />
nach (invarianten) Grundtermsemantiken für unsere Programme, insbesondere solchen, die<br />
auf (deterministischen) Reduktionsstrategien beruhen. Im Zusammenhang mit höheren Programmiersprachen<br />
fällt oft der Begriff des Auswertungsmechanismus. Dieser beschreibt, wie in einer<br />
höheren Programmiersprache die Parameterübergabe an Funktionen oder Prozeduren erfolgt. Für<br />
funktionale Programmiersprachen sind die beiden unterschiedlichen Auswertungsmechanismen<br />
call-by-value (cbv) und call-by-name (cbn) bekannt, und sie stehen in engem Zusammenhang<br />
mit bestimmten Reduktionsstrategien.<br />
Der cbv-Auswertungsmechanismus wertet erst die Argumente einer Funktion vollständig aus, bevor<br />
die Funktion selber ausgeführt wird. Dies ist der Auswertungsmechanismus der meisten imperativen<br />
Programmiersprachen. Dagegen erfolgt bei dem cbn-Auswertungsmechanismus der Funktionsaufruf<br />
direkt; die unausgewerteten Argumente werden in den Funktionskörper hineinkopiert.<br />
Die Argumente werden erst ausgewertet, wenn sie wirklich benötigt werden. Das folgende Beispiel<br />
verdeutlicht die beiden Auswertungsmechanismen.<br />
Beispiel 4.1 Call-by-value und call-by-name<br />
Call-by-value Auswertung:<br />
head(liste1) −−→<br />
P<br />
liste1 → []:liste1<br />
head(x:xs) → x<br />
head([] : liste1) −−→<br />
P<br />
head([] : [] : liste1) −−→<br />
P<br />
. . .