On this page:
Konzepte der Programmiersprachen, SS 2014 Philipps-Universität Marburg

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

Prof. Dr. Klaus Ostermann

mit Beiträgen von Yufei Cai, Yi Dai und 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.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