Prof. Dr. Klaus Ostermann
1 Programmieren mit Ausdrücken
1.1 Programmieren mit arithmetischen Ausdrücken
1.2 Arithmetik mit nicht-numerischen Werten
1.3 Auftreten und Umgang mit Fehlern
1.4 Bedeutung von BSL Ausdrücken
2 Programmierer entwerfen Sprachen!
2.1 Funktionsdefinitionen
2.2 Funktionen die Bilder produzieren
2.3 Bedeutung von Funktionsdefinitionen
2.4 Konditionale Ausdrücke
2.4.1 Motivation
2.4.2 Bedeutung konditionaler Ausdrücke
2.4.3 Beispiel
2.4.4 Etwas syntaktischer Zucker...
2.4.5 Auswertung konditionaler Ausdrücke
2.5 Definition von Konstanten
2.6 DRY: Don’t Repeat Yourself!
2.6.1 DRY durch Konstantendefinitionen
2.6.2 DRY Redux
2.7 Bedeutung von Funktions- und Konstantendefinitionen
2.8 Kommentare
2.9 Programmieren ist mehr als das Regelverstehen!
3 Systematischer Programmentwurf
3.1 Funktionale Dekomposition
3.2 Vom Problem zum Programm
3.3 Systematischer Entwurf mit Entwurfsrezepten
3.3.1 Testen
3.3.2 Informationen und Daten
3.3.3 Entwurfsrezept zur Funktionsdefinition
3.3.4 Programme mit vielen Funktionen
3.4 Information Hiding
4 Batchprogramme und interaktive Programme
4.1 Batchprogramme
4.2 Interaktive Programme
4.2.1 Das Universe Teachpack
5 Datendefinition durch Alternativen: Summentypen
5.1 Auzählungstypen
5.2 Intervalltypen
5.3 Summentypen
5.3.1 Entwurf mit Summentypen
5.4 Unterscheidbarkeit der Alternativen
6 Datendefinition durch Zerlegung: Produkttypen
6.1 Die posn Struktur
6.2 Strukturdefinitionen
6.3 Verschachtelte Strukturen
6.4 Datendefinitionen für Strukturen
6.5 Fallstudie: Ein Ball in Bewegung
6.6 Erweiterung des Entwurfsrezepts
7 Datendefinition durch Alternativen und Zerlegung: Algebraische Datentypen
7.1 Beispiel: Kollisionen zwischen Shapes
7.2 Programmentwurf mit ADTs
8 Bedeutung von BSL
8.1 Wieso?
8.2 Kontextfreie Grammatiken
8.3 Syntax von BSL
8.4 Die BSL Kernsprache
8.5 Werte und Umgebungen
8.6 Auswertungspositionen und die Kongruenzregel
8.7 Nichtterminale und Metavariablen - Keine Panik!
8.8 Bedeutung von Programmen
8.9 Bedeutung von Ausdrücken
8.9.1 Bedeutung von Funktionsaufrufen
8.9.2 Bedeutung von Konstanten
8.9.3 Bedeutung konditionaler Ausdrücke
8.9.4 Bedeutung boolscher Ausdrücke
8.9.5 Bedeutung von Strukturkonstruktoren und Selektoren
8.10 Reduktion am Beispiel
8.11 Bedeutung von Daten und Datendefinitionen
8.12 Refactoring und Schliessen durch Gleichungen
8.12.1 Refactoring von Ausdrücken
8.12.2 Refactoring von algebraischen Datentypen
9 Daten beliebiger Größe
9.1 Rekursive Datentypen
9.2 Programmieren mit rekursiven Datentypen
9.3 Listen
9.3.1 Listen, hausgemacht
9.3.2 Listen aus der Konserve
9.3.3 Die list Funktion
9.3.4 Datentypdefinitionen für Listen
9.3.5 Aber sind Listen wirklich rekursive Datenstrukturen?
9.3.6 Natürliche Zahlen als rekursive Datenstruktur
9.4 Mehrere rekursive Datentypen gleichzeitig
9.5 Entwurfsrezept für Funktionen mit rekursiven Datentypen
9.6 Refactoring von rekursiven Datentypen
9.7 Programmäquivalenz und Induktionsbeweise
10 Quote und Unquote
10.1 Quote
10.2 Symbole
10.3 Quasiquote und Unquote
10.4 S-Expressions
10.5 Anwendungsbeispiel: Dynamische Webseiten
11 DRY: Abstraktion überall!
11.1 Abstraktion von Konstanten
11.2 Funktionale Abstraktion
11.3 Funktionen als Funktionsparameter
11.4 Abstraktion in Signaturen, Typen und Datendefinitionen
11.4.1 Abstraktion in Signaturen
11.4.2 Signaturen für Argumente, die Funktionen sind
11.4.3 Funktionen höherer Ordnung
11.4.4 Polymorphe Funktionen höherer Ordnung
11.4.5 Abstraktion in Datendefinitionen
11.4.6 Grammatik der Typen und Signaturen
11.5 Lokale Abstraktion
11.5.1 Lokale Funktionen
11.5.2 Lokale Konstanten
11.5.3 Intermezzo: Successive Squaring
11.5.4 Lokale Strukturen
11.5.5 Scope lokaler Definitionen
11.6 Funktionen als Werte: Closures
11.7 Lambda, die ultimative Abstraktion
11.8 Wieso abstrahieren?
12 Bedeutung von ISL+
12.1 Syntax von Core-ISL+
12.2 Werte und Umgebungen
12.3 Bedeutung von Programmen
12.4 Auswertungspositionen und die Kongruenzregel
12.5 Bedeutung von Ausdrücken
12.5.1 Bedeutung von Funktionsaufrufen
12.5.2 Bedeutung von lokalen Definitionen
12.5.3 Bedeutung von Konstanten
12.6 Scope
13 Pattern Matching
13.1 Pattern Matching in ASL
13.2 Pattern Matching formal
14 Generative Rekursion
14.1 Wo kollidiert der Ball?
14.2 Schnelles Sortieren
14.3 Entwurf von generativ rekursiven Funktionen
14.4 Terminierung
15 Akkumulation von Wissen
15.1 Beispiel: Relative Distanz zwischen Punkten
15.2 Beispiel: Suche in einem Graphen
15.3 Entwurf von Funktionen mit Akkumulatoren
15.3.1 Wann braucht eine Funktion einen Akkumulator
15.3.2 Template für Funktionen mit Akkumulatoren
15.3.3 Die Akkumulator-Invariante
15.3.4 Implementation der Akkumulator-Invariante
15.3.5 Nutzung des Akkumulators