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.
38 KAPITEL 3. DIE PROGRAMME<br />
Beispiel 3.1 Addition und Multiplikation mit Pattern<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 />
Programme bestehen also hauptsächlich aus Termen über einer Signatur. Die klare Unterscheidung<br />
zwischen den die Datenelemente aufbauenden Konstruktoren (Zero, Succ) und den eigentlichen<br />
Funktionen (add, mult) bildet die Grundlage konstruktorbasierter funktionaler Programmiersprachen<br />
und steht damit übrigens im Gegensatz zu der bei algebraischen Spezifikationen ([Wir90])<br />
üblichen Vorgehensweise. Die Unterscheidung legen wir schon in den speziellen Signaturen für Programme,<br />
den Programmsignaturen, fest.<br />
Definition 3.1 Programmsignatur<br />
Sei C eine Signatur von Konstruktorsymbolen, die mindestens eine Konstante enthält, d. h.<br />
C0 = ∅. Sei F eine Signatur von Funktionssymbolen. Es gelte C ∩ F = ∅. Dann ist Σ = (C, F)<br />
eine Programmsignatur.<br />
Wir fassen die Programmsignatur oft auch als Signatur Σ = C ˙∪ F auf wobei jedoch noch jedes<br />
Operationssymbol f ∈ Σ eindeutig als Konstruktor- oder Funktionssymbol identifizierbar sein soll.<br />
✷<br />
Zur einfacheren Unterscheidung verwenden wir grundsätzlich Großbuchstaben für die Bezeichnung<br />
von Konstruktorsymbolen. Funktionssymbole und auch Symbole der Programmsignatur allgemein<br />
werden durch Kleinbuchstaben gekennzeichnet. Auch in konkreten Beispielen verwenden wir diese<br />
Konvention, wobei Bezeichner von Konstruktoren dann mit einem Großbuchstaben beginnen. Die<br />
funktionalen Programmiersprachen Miranda und Haskell erzwingen dies durch ihre Syntax.<br />
Definition 3.2 Programm mit Pattern<br />
Sei Σ eine Programmsignatur und X eine Variablenmenge. Ein geordnetes Paar von Termen<br />
f(p1, . . .,pn) → r<br />
mit f (n) ∈ Σ, p1, . . .,pn ∈ TC(X), l := f(p1, . . . , pn) linear und r ∈ TΣ(Var(p)) heißt Programmregel<br />
mit Pattern. Eine endliche Menge P von Programmregeln mit Pattern, die die Eindeutigkeitsbedingung<br />
l1→r1, l2→r2 ∈ P, l1σ1 = l2σ2 =⇒ r1σ1 = r2σ2<br />
erfüllt, heißt Programm mit Pattern. ✷<br />
Auf den offensichtlichen Zusammenhang mit beinahe orthogonalen Termersetzungssystemen werden<br />
wir erst in 3.2 eingehen.<br />
Die Eindeutigkeitsbedingung besagt, daß die Überlappung linker Programmregelseiten nur zugelassen<br />
wird, wenn unter den unifizierenden Substitutionen auch die entsprechenden rechten Regelseiten<br />
syntaktisch gleich sind.<br />
✷