Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4. Die Funktion reverse:A ∗ →A ∗ dreht die Reihenfolge <strong>der</strong> Elemente einer Liste um:<br />
reverse(l) = if l= then else reverse(tail(l))&<br />
Neben Listen werden wir auch endliche Mengen benutzen (d.h Aufzählungen von Werten, bei denen ein<br />
mehrfaches Vorkommen von Elementen nicht berücksichtigt wird). Wir gehen davon aus, das die Bedeutung<br />
von Mengennotationen bekannt ist und werden sie daher hier nicht mehr ausführlich besprechen. Abbildung<br />
2.17 fast alle wichtigen Notationen <strong>der</strong> Metasprache zusammen.<br />
λx. ausdruck Funktionsdefinition<br />
f(x) Funktionsanwendung<br />
if..then..else Fallunterscheidung<br />
let x = Teilausdruck in Ausdruck determinierte Abkürzung<br />
Ausdruck where x = Teilausdruck von Teilausdrücken<br />
let x ∈ Bereich in Ausdruck indeterminierte Abkürzung<br />
Ausdruck where x ∈ Bereich von Teilausdrücken<br />
{} Leere Menge<br />
{arg1,...,argn} Explizite Mengenangabe<br />
M1∪M2, M1∩M2<br />
Vereinigung, Durchschnitt<br />
M1-M2<br />
Mengendifferenz<br />
[] Leere Tabelle (endliche Funktion)<br />
[arg1↦→wert1, ...,argn↦→wertn ] Explizite Tabellenangabe<br />
domain(tab) Domain <strong>der</strong> endlichen Funktion tab<br />
tab1+tab2<br />
Verschmelzung zweier Tabellen<br />
tab / {arg1,...,argn} Entfernen von Tabelleneinträgen<br />
A∗ Menge aller Listen über Elementen aus A<br />
Leere Liste<br />
Explizite Listenangabe<br />
head(l) Erstes Element von l<br />
tail(l) Rest von l<br />
l1 & l2 Verkettung zweier Listen<br />
2.4 Diskussion<br />
Abbildung 2.17: Spezielles Vokabular <strong>der</strong> Metasprache<br />
Wegen <strong>der</strong> Zweideutigkeiten in <strong>der</strong> natürlichen Sprache sind formale Sprachbeschreibungen ein notwendiges<br />
Handwerkzeug zur präzisen Beschreibung <strong>der</strong> Programmierung. Nur damit ist es möglich, den Zusammenhang<br />
zwischen <strong>der</strong> natürlichsprachigen Beschreibung eines Problems, welches man lösen will, und <strong>der</strong> – notwendigerweise<br />
absolut formalen – Computersprache, in <strong>der</strong> eine Lösung beschrieben werden soll, zu klären.<br />
Um Kommunikationsschwierigkeiten zu vermeiden, ist es wichtig, daß alle Beteiligten für diesen Zweck die<br />
gleiche formale Sprache, d.h. die gleichen syntaktischen Konstrukte, verwenden und mit den einzelnen Konstrukten<br />
auch die gleiche Bedeutung (Semantik) verbinden. Statt also in jedem Einzelfall lange zu diskutieren,<br />
was gemeint war, legen wir uns ein für allemal fest, was bestimmte Ausdrücke bedeuten sollen und wie man<br />
eine solche Bedeutung ausrechnen kann.<br />
In diesem Kapitel haben wir Beschreibungsformen für die Syntax einer Sprache (Backus-Naur Form, Syntaxdiagramme)<br />
und ihre Semantik (Definitionsgleichungen, Interpretation in einer Metasprache) vorgestellt. Sie<br />
sollten nun in <strong>der</strong> Lage sein, die Syntax einer in dieser Art beschriebenen Sprache zu verstehen und ihre Bedeutung<br />
zu erfassen. Mit <strong>der</strong> seit langem innerhalb <strong>der</strong> Mathematik etablierte Logik haben wir die vielleicht