0 Funktionale Programmierung Aunt Agatha: Well, James, what programming language are you studying in this term at university? James: Haskell. Agatha: Is that a procedural language, like Pascal? James: No. Agatha: Is it object-oriented, like Java or C++? James: No. Agatha: What then? James: Haskell is a fully higher-order purely functional language with a non-strict semantics and polymorphic static typing. Agatha: Oh. hPausei More tea, James? Originally due to Richard Bird. © 2003 T. Grust · Funktionale Programmierung: 0. Funktionale Programmierung 1 Programmieren mit Termersetzung fac :: Integer -> Integer fac 0 = 1 fac n = n * fac (n-1) _ _ _ _ _ _ _ _∗ fac 3 * 3 * 3 * 3 * 3 * 3 * 3 * 6 3 fac fac 2 * 2 * 2 * 2 * 2 * (3-1) 2 fac (2-1) fac 1 1 * fac (1-1) 1 * fac 0 1 * 1 Fragen: I Wie wird der nächste zu ersetzende Term bestimmt? I Spiel diese Auswahl überhaupt eine Rolle? I Gibt es unendliche Ersetzungsfolgen? I ... © 2003 T. Grust · Funktionale Programmierung: 0. Funktionale Programmierung 9 > > > > > = λ-Kalkül > > > > > ; 2 The Taste of Functional Programming (FP) I A programming language is a medium for expressing ideas (not to get a computer perform operations). Thus programs must be written for people to read, and only incidentally for machines to execute. I Using FP, we restrict or limit not what we program, but only the notation for our program descriptions. I Large programs grow from small ones – idioms. Develop an arsenal of idioms of whose correctness we are convinced (or whose correctness we have proven). Combining idioms is crucial. I It is better to have 100 functions operate on one datastructure than 10 functions on 10 datatstructures. Alan J. Perlis I FP in the real world: see Ericsson & http://www.erlang.org/ © 2003 T. Grust · Funktionale Programmierung: 0. Funktionale Programmierung 3 Materialien zur Vorlesung und Haskell I Homepage der Vorlesung: http://www.inf.uni-konstanz.de/dbis/teaching/ss03/functional-programming/ Dort: Termine, Räume, Vorlesungsskript, Übungsblätter, Quelltexte, . . . I Mailing-Liste der Vorlesung: [email protected] Erreicht alle Teilnehmer der Vorlesung. Bitte lest regelmäßig eure e-mail! I Dokumente zur Definition von Haskell 98: http://www.haskell.org/onlinereport/ http://www.haskell.org/onlinelibrary/ (Sprachdefinition) (Bibliotheken) Dort sind auch PostScript- und PDF-Versionen der Dokumente zu finden. I Ideales Begleitbuch zur Vorlesung: Richard Bird, Philip Wadler, Introduction to Functional Programming using Haskell, 2. Ausgabe, 1999, Prentice Hall. U KN Bibliothek lbs 843/b47 (10 Exemplare, einige Exemplare der 1. Ausgabe finden sich unter kid 240.20/b47). © 2003 T. Grust · Funktionale Programmierung: 0. Funktionale Programmierung 4 Haskell im Netz I Haskell im Web http://haskell.org/ Dokumente (Haskell 98 Report, Haskell 98 Library Report) Tutorials Haskell-Compiler (ghc, hbc, nhc) und -Interpreter (hugs) ... I Haskell in den Usenet News comp.lang.functional Diskussionen über funktionale Programmiersprachen allgemein, teilweise fortgeschrittenere Themen, teilweise Fragen von Anfängern. Keine Übungsaufgaben posten! I Haskell Mailing-Liste http://haskell.org/mailinglist.html Alle Aspekte von Haskell, Anwendungen, Definition und Entwicklung der Sprache selbst, meist fortgeschrittenere Themen. Aber auch als read-only Liste sehr lesenswert! © 2003 T. Grust · Funktionale Programmierung: 0. Funktionale Programmierung 5 Haskell im Linux-Pool I Editor emacs kommt mit haskell-mode, beherrscht syntax coloring, rückt automatisch ein (→ 2-dimensionale Syntax, layout), interagiert mit ghci. I Haskell-Interpreter ghci macht interaktives Arbeiten mit Haskell möglich, bietet browsing von Haskell-Quelltexten, liefert Informationen über Typen, Operatoren. © 2003 T. Grust · Funktionale Programmierung: 0. Funktionale Programmierung 6