Prof. Dr. Klaus Ostermann,Yi Dai,and Tillmann Rendel
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.5 Bedeutung konditionaler Ausdrücke
2.5.1 Beispiel
2.5.2 Etwas syntaktischer Zucker...
2.5.3 Auswertung konditionaler Ausdrücke
2.6 Definition von Variablen
2.7 DRY: Don’t Repeat Yourself!
2.7.1 DRY durch Variablendefinitionen
2.7.2 DRY Redux
2.8 Bedeutung von Funktions- und Variablendefinitionen
2.9 Kommentare
2.10 Programmieren ist mehr als das Regelverstehen!
3 Hierarchische Abstraktion mit Funktionen
3.1 Funktionale Dekomposition
3.2 Vom Problem zum Programm
3.3 Systematischer Entwurf von Programmen
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 Summen
5.1 Auzählungstypen
5.2 Intervalltypen
5.3 Summentypen
5.4 Unterscheidbarkeit der Alternativen
6 Produkte
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 Polynome
7.1 Beispiel: Kollisionen zwischen Shapes
7.2 Programmentwurf mit Polynomtypen
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 Variablen
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 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 Das neue Entwurfsrezept
10 DRY: Abstraktion überall!
10.1 Abstraktion von Konstanten
10.2 Funktionale Abstraktion
10.3 Funktionen als Funktionsparameter
10.4 Abstraktion in Signaturen, Typen und Datendefinitionen
10.4.1 Abstraktion in Signaturen
10.4.2 Signaturen für Argumente, die Funktionen sind
10.4.3 Funktionen höherer Ordnung
10.4.4 Polymorphe Funktionen höherer Ordnung
10.4.5 Abstraktion in Datendefinitionen
10.4.6 Grammatik der Typen und Signaturen
10.5 Lokale Abstraktion
10.5.1 Lokale Funktionen
10.5.2 Lokale Variablen
10.5.3 Intermezzo: Successive Squaring
10.5.4 Lokale Strukturen
10.5.5 Scope lokaler Definitionen
10.6 Funktionen als Werte: Closures
10.7 Lambda, die ultimative Abstraktion
10.8 Wieso abstrahieren?
11 Bedeutung von ISL+
11.1 Syntax von Kern-ISL+
11.2 Umgebungen
11.3 Reduktion von Ausdrücken
11.3.1 Reduktion von Funktionsapplikation
11.3.2 Reduktion lokaler Definitionen
11.3.3 Reduktion konditionaler Ausdrücke
11.3.4 Auswertung von Ausdrücken
11.4 Ist das keine zirkuläre Sprachdefinition?
11.5 Ist dies ein Interpreter?
12 Pattern Matching
12.1 Matching Literals
12.1.1 Motivating Example 1 — Debitalization
12.2 Matching Data Structures
12.2.1 Matching Built-in Data Structures
12.2.2 Matching User-defined Data Structures
12.2.2.1 Motivating Example 2 — Poker
12.3 Matching Argument Lists
12.3.1 An Explicit Way to Apply a Function
12.3.2 The Magic behind Variadic Functions
13 Pattern Macroing
13.1 Code and Data
13.1.1 S-expressions
13.1.2 Code as Data
13.2 Pattern-based Macros
13.2.1 Avoiding Code Repetition
13.2.2 Abbreviating Coding Patterns
13.2.3 Extending Language Syntax
13.2.4 The Use or Abuse of Macros