Ein Hauch von Babylon

Werbung
Ein Hauch von Babylon
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
1
Wann ist ein Sprache funktional?
Funktionen werden wie alle anderen Daten
behandelt.
Wir kennen nur Funktionen die einen Namen
haben.
int twice(int v){
return 2*v;
}
Andere Daten wie Zahlen brauchen keinen Namen:
System.out.println(47.11);
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
2
Expertenmeinungen zu Lisp
„The greatest single programming language ever
designed.” (Alan Kay)
„The most intelligent way to misuse a computer“
(Anonymous)
„Lisp is a language for doing what you've been told is
impossible.“ (Kent Pitman)
„Anyone could learn Lisp in one day, except that if they
already knew Fortran, it would take three days.”
(Marvin Minsky)
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
3
S-Ausdrücke
Ein Atom ist ein Literal oder ein Symbol.
Beispiele
 47.11, 23
 "Hello Lisp"
+
 list
 defun
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
4
S-Ausdrücke
Ein S-Ausdruck ist entweder
 ein Atom oder
 ein Paar(U . V) ,wobei U und V ebenfalls SAusdrücke
̈
sind.
U V
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
5
S-Ausdrücke in Lisp
Der S-Ausdruck
(47 . 11)
Wird in Lisp so konstruiert:
(cons 47 11)
Die Liste
(23 47 11)
können wir so definieren:
(cons 23 (cons 47 (cons 11 nil)))
Bild siehe http://en.wikipedia.org/wiki/Cons
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
6
S-Ausdrücke in Lisp
Ein S-Ausdruck ist also
 ein Atom oder
 eine Liste
Durch Schachtelung sind Baumstrukturen bildbar:
(person
(name Müller)
(vorname Lothar)
)
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
7
Funktionen in Lisp
Funktionen können einen Namen haben:
(defun sum(n)
(if (eq n 0)
0
(+ n (sum (- n 1)))))
Oder anonym definiert werden
(lambda(a b) (+ a b))
Wie beim Lambda-Kalkül von Church!
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
8
Typsysteme
statisch - dynamisch
explizit - implizit
sicher - unsicher
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
9
ML - Der Pionier
 Type Inference (Typableitung)
 Pattern Matching (Musterabgleich)
 Polymorphie (Generics)
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
10
ML - Der Pionier
Multiparadigmensprachen
 Funktional
 Imperativ
 Objektorientiert
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
11
Haskell –
Funktionale Programmierung in Reinform
Der Unterschied zwischen Funktionen und
Konstanten schwindet weiter.
Vieles kann kompakter und klarer formuliert
werden.
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
12
Wie sieht das in Haskell aus?
Anonyme Funktionen
(\a b ->a+b) 2 3
Beispiel ergibt 5
Funktionen höherer Ordnung
Der : ist hier der cons-Operator. [] entspricht nil. Beide Definitionen von accu zusammen entsprechen einer
Fallunterscheidung durch Pattern Matching. Erste Zeile: Rekursionsabbruch, zweite Zeile: Selbstaufruf.
accu f (x:[]) = x
accu f (x:xs) = f x (accu f xs)
Funktionen höherer Ordnung benutzen
Mit obiger Funktion accu und untigem Lambda-Ausdruck werden alle Elemente der Liste multipliziert.
Liefert 23*47*11, d.h. 11891:
accu (\a b->a*b) [23,47,11]
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
13
Laziness
Eine unendliche Folge von Einsen:
ones=1:ones
Werte werden so spät wie möglich ermittelt
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
14
Wann ist eine Sprache funktional?
Absolutes Minimum:
Anonyme Funktionen sind möglich.
Viele Skriptsprachen funktional:
 JavaScript
 Ruby...
Java war lange nicht funktional:
Closures (so ähnlich wie anonyme Methoden) sind
erst ab Java 8 enthalten.
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
15
Welche Sprache nehmen wir?
Multiparadigmensprache für die JVM
Java Programme können bequem integriert
werden.
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
16
Alles klar?
In funktionalen Sprachen werden Funktionen wie
alle andere Daten behandelt.
Insbesondere
 können wir Funktionen als Argumente an
Funktionen übergeben
̈
oder
 sie können Ergebnisse von Funktionen sein.
Solche Funktionen heißen Funktionale oder
Funktionen höherer Ordnung
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
17
Alles klar?
 Das Prädikat
̈
rein funktional tragen nur wenige
Sprachen wie Haskell. Die meisten funktionalen
Sprachen sind Multiparadigmensprachen.
 Moderne funktionale Sprachen haben ein statisches,
implizites und sicheres Typsystem.
 Wenn das Typsystem statisch ist, hat jede Funktion
einen eigenen Datentyp.
 Moderne funktionale Sprachen haben viele
Eigenschaften wie Pattern Matching, Typableitung
und Generics, die es zum ersten Mal in ML gab.
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
18
Alles klar?
 Einige Sprachen wie Haskell, verwenden die
Lazy Evaluation zur Auswertung von
Ausdrücken.
 Hier arbeiten wir mit Java und der funktionalen
Sprache Scala.
L. Piepmeyer: Funktionale Programmierung - Ein Hauch von Babylon
19
Herunterladen