Konzepte der Programmiersprachen, SS 2012 Philipps-Universität Marburg

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