08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!