0 Funktionale Programmierung

Werbung
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
Herunterladen