O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Das Curry-Buch

Book Description

Im Alltag der imperativen Programmierung mit JavaScript bringen ungeplante Programmänderungen die gewohnten Abstraktionsmechanismen mitunter an ihre Grenzen. In diesem Buch wird ein Einstieg in die funktionale Programmierung dargeboten, deren Ansatz sich von den übrigen Arten der Programmierung unterscheidet und zu Unrecht als schwierig zu verstehen gilt.

Table of Contents

  1. Einleitung
    1. Wie dieses Buch aufgebaut ist
      1. Kapitel 1: Hinein ins Vergnügen
      2. Kapitel 2: Abstraktion
      3. Kapitel 3: Ein Topf mit Curry
      4. Kapitel 4: Gemüse, Map, Reduce und Filter
      5. Kapitel 5: Rekursion
      6. Kapitel 6: Event-basierte Programmierung und Continuations
      7. Kapitel 7: Vom Lambda-Kalkül und Lammcurry
      8. Kapitel 8: Typen
      9. Kapitel 9: Kochen als Monade
      10. Kapitel 10: Nachtisch und Resteessen
      11. Anhang: Link- und Literaturliste
    2. Besuchen Sie uns auf der Webseite zum Buch
    3. Lizenzbestimmungen
    4. Typografische Konventionen
    5. Danksagungen
  2. 1. Hinein ins Vergnügen
    1. Warum funktionale Programmierung?
      1. Besonderheiten der funktionalen Programmierung
    2. JavaScript
      1. Die Geschichte von JavaScript
      2. Eigenschaften und Eigenheiten von JavaScript
        1. Funktionen sind first-class citizens
        2. Anonyme Funktionen
        3. Closures
      3. Überraschende Sprachelemente
        1. Semikolons
        2. Coercion
        3. Scoping
        4. Was ist ein Scope?
        5. Shadowing
        6. Prototypenbasiertes Objektsystem
    3. Funktionale Sprachelemente und Konzepte
    4. Unterscheidungsmerkmale von Programmiersprachen
      1. Kompilierte und Interpretierte Sprachen
      2. Typisierung
    5. JavaScript im Vergleich mit anderen Programmiersprachen: Ist das Java?
      1. JavaScript und rein funktionale Programmiersprachen
    6. Aufbruch in die Welt der funktionalen Programmierung und der Gewürze
    7. Rezeptor: Über hundert Curry-Gerichte, funktional und automatisch erstellt
      1. Imperative Lösung
        1. Unterschiedliche Gewürze
        2. Abstraktion in eine Funktion
      2. Funktionale Lösung
  3. 2. Abstraktionen
    1. Modellierung: Theorie und Praxis
    2. Abstraktion von einem Wert: Variablen
    3. Abstraktion von einem Codeblock: Funktionen
    4. Abstraktion von einer Funktion: Funktionen höherer Ordnung
  4. 3. Ein Topf mit Curry
    1. Präfix, Infix, Stelligkeit
      1. Curryfizierung und teilweise Anwendung von Funktionen
    2. Teilweise Funktionsanwendung
    3. Automatische Curryfizierung
    4. Implizite Argumente, Komposition und Point-Free-Style
  5. 4. Gemüse, Map, Reduce und Filter
    1. Auberginen und die Funktionen höherer Ordnung
    2. Weitere Funktionen höherer Ordnung: Map, Reduce, Filter und Kolleginnen
    3. Parallele Berechnung auf Arrays mit Map
      1. Map iterativ
      2. Verwendung von Map
      3. Map und Curry
      4. Exkurs: Vorsicht bei parseInt in Verbindung mit Map
    4. Kombinieren von Lösungen mit Reduce
      1. Motivation für Reduce: sum und unwords
      2. Iteratives reduce
      3. Rekursives reduce
      4. Vordefiniertes reduce auf Arrays
      5. Reduce im Einsatz: sum und unwords
      6. Left- und Right-Reduce
    5. Auswählen von Lösungen mit Filter
    6. Zusammenhang zwischen Reduce und Map
    7. Verallgemeinerung der Funktionen höherer Ordnung auf Arrays
  6. 5. Rekursion
    1. Vom Problem zum Programm: Spezifikation, Ein- und Ausgabe
      1. Zerteilen eines Programmierproblems
      2. Divide and Conquer
    2. Rekursive Funktionen
      1. Eine rekursive Berechnung
      2. Fettnäpfchen bei der Rekursion
        1. Problem: Wiederholte Lösung von Problemen
        2. Lösung: Memoisation / Tabellierung
        3. Problem: Verbrauch von Call Frames
        4. Lösung: Tail-Rekursion
      3. Rekursion über die Ein- und Ausgabedaten
    3. Strukturelle Rekursion auf Listen
      1. Listen als algebraische Datentypen, Pattern Matching
      2. Eine zirkuläre Liste
    4. Strukturelle Rekursion auf Bäumen
      1. Ein allgemeines Rekursionsschema
  7. 6. Event-basierte Programmierung und Continuations
    1. Event-basierte Programmierung
      1. Der Umgang mit asynchronen Ereignissen
        1. Threads
        2. Event-Loop
      2. Beispiel: Rezept-Scraper
      3. Beispiel: Event-basiertes Kochen
    2. Continuations
      1. Beispiel: Fakultätsfunktion mit Continuations
      2. Continuations in der Praxis
      3. Continuations überall
  8. 7. Vom Lambda-Kalkül und Lammcurry
    1. Ausdrücke im Lambda-Kalkül
      1. Klammerregeln für Ausdrücke
      2. Lambda-Ausdrücke in JavaScript
      3. Einbettung und domänenspezifische Sprachen
    2. Reduktion
    3. Substitution
    4. Wohlgeformte Ausdrücke
    5. Gleichheit von Ausdrücken – Äquivalenz
    6. Auswertungsstrategien und Normalformen
      1. Lazy Evaluation – die faule Auswertung
      2. Eager Evaluation – die eifrige Auswertung
    7. Repräsentation von Daten im Lambda-Kalkül
      1. Wahrheitswerte im Lambda-Kalkül: Church-Booleans
        1. Negation
        2. Logisches Und
        3. Logisches Oder
        4. Bedingte Anweisung
      2. Zahlen im Lambda-Kalkül: Church-Numerale
      3. Rekursion im Lambda-Kalkül: Fixpunktkombinatoren
      4. Partielle Auswertung
      5. Fazit zum Kapitel – ist noch Lamm da?
  9. 8. Typen
    1. Typisierung und Typüberprüfung
    2. JavaScript ist dynamisch typisiert
    3. JavaScript ist schwach typisiert
    4. Vorsicht beim Umgang mit Typen in JavaScript
    5. Primitive Datentypen
      1. Strings
      2. Zahlen
      3. Wahrheitswerte/Booleans
    6. Arrays
      1. Objekte
    7. Undefined und Null
      1. Deklarieren von Variablen, Erzeugen von Objektinstanzen mit new
    8. Primitive Datentypen versus Objekte
    9. Polymorphismus
      1. Arten von Polymorphismus
        1. Universeller Polymorphismus
        2. Ad-hoc-Polymorphismus
    10. JavaScript: Polymorphismus durch Prototypen
    11. Quellen der Verwirrung durch das Typsystem
      1. Falle 1: Automatische Typkonversion / Coercion
      2. Falle 2: Überladene Operatoren
    12. Stärkere Typen für JavaScript
      1. Klassenbasiertes Objektsystem und Polymorphismus mit Joose
      2. Spezifikation von Typen für Variablen mit TypeScript
      3. ECMAScript 4
      4. Alternative mit Typinferenz und Typchecking: Rust
    13. Fazit zu JavaScripts Typsystem
  10. 9. Kochen als Monade
    1. Ein programmierbares Semikolon
    2. Monaden als Behälter: Dinge, Kochtöpfe und Monaden
    3. Das Monaden-Muster
    4. Monaden links, Monaden rechts, Monaden überall
      1. IO-Monade
      2. Writer-Monade
      3. List-Monade
      4. Abstrakte Datentypen als Monaden
      5. Bibliotheken als Monaden
    5. Zusammenhang zwischen Continuation-Passing-Style und Monaden
    6. Warum das Ganze?
      1. Die gefürchteten Monaden-Gesetze
    7. Weblinks und weiterführendes Material
  11. 10. Nachtisch und Resteessen
    1. Eigenheiten der Sprache JavaScript
      1. Dynamischer Scope
      2. Prototypenbasiertes Objektsystem
      3. Coercion und der überladene Operator +
      4. Argumentübergabe
      5. Semikolons
    2. Konzepte der funktionalen Programmierung
      1. Rekursion, algebraische Datentypen, Pattern Matching, Funktionen höherer Ordnung
      2. Continuation-Passing-Style
      3. Lazy Evaluation
      4. Monaden
    3. Funktionale Bibliotheken
    4. Sprachen, die JavaScript verbessern wollen
      1. CoffeeScript
      2. LiveScript
      3. Dart
      4. TypeScript
      5. ClojureScript
      6. Roy
      7. ECMAScript 6
    5. Die Welt der funktionalen Sprachen abseits von JavaScript
      1. Scheme und Lisp
      2. Haskell
      3. Abhängige Typen, Agda, Idris und Coq
  12. A. Link- und Literaturliste
    1. Kapitel 1: Hinein ins Vergnügen
      1. Links
      2. Literatur
    2. Kapitel 2: Abstraktion
      1. Links
    3. Kapitel 3: Ein Topf mit Curry
      1. Links
      2. Literatur
    4. Kapitel 4: Gemüse, Map, Reduce und Filter
      1. Links
    5. Kapitel 5: Rekursion
      1. Links
      2. Literatur
    6. Kapitel 6: Event-basierte Programmierung und Continuations
      1. Links
    7. Kapitel 7: Vom Lambda-Kalkül und Lammcurry
      1. Links
      2. Literatur
    8. Kapitel 8: Typen
      1. Links
      2. Literatur
    9. Kapitel 9: Kochen als Monade
      1. Links
      2. Literatur
    10. Kapitel 10: Nachtisch und Resteessen
      1. Links
  13. B. Über die Autorin und die Autoren
  14. Stichwortverzeichnis
  15. Kolophon
  16. Copyright