Kapitel 11: Zusammenfassung

Werbung
Programmieren in Haskell
Zusammenfassung
Programmieren in Haskell
1
Kapitel 1: Einführung
• Haskellprogramme sind sehr kurz
• Haskell hat hohe Ausdruckskraft (“expressive power”)
qsort :: (Ord a) => [a] -> [a]
qsort []
= []
qsort (a:as) = qsort [b | b <- as, b < a]
++ [a]
++ qsort [ b | b <- as, b >= a]
Programmieren in Haskell
2
Kapitel 2: Wir steigen ein ...
• Ausdrücke
• Werte
• Eingebaute Datentypen (Bool, Int, ...)
• Typklassen (Eq, Show, ...)
• Neue Datentypen (data)
data Einheit
= Celsius
|
Fahrenheit |
Kelvin
data Temperatur = Temp Float Einheit
Programmieren in Haskell
deriving (Eq,Show)
deriving (Eq,Show)
3
Kapitel 3: Musikantenstadl
• Eine Formelsprache für Musik
• In Haskell wird gerechnet
• Rechnen heißt: Manipulation von Werten nach festgelegten Regeln
transponiere
transponiere
transponiere
transponiere
transponiere
transponiere
Programmieren in Haskell
i
i
i
i
i
i
(Pause d)
(Note t d)
(m1 :*: m2)
(m1 :+: m2)
(Instr y m)
(Tempo n m)
=
=
=
=
=
=
Pause d
Note (t+i) d
(transponiere i m1) :*:
(transponiere i m1) :+:
Instr y (transponiere i
Tempo n (transponiere n
(transponiere i m2)
(transponiere i m2)
m)
m)
4
Kapitel 4: Syntax und Semantik von Haskell
• Datentypen
• Variablenbindungen
• Musterbindungen
• Funktionsbindungen
• Bewachte Gleichungen
• Lokale Definitionen
• Gültigkeitsbereiche
• Fallunterscheidungen
• Syntaktischer Zucker vs. Kernsprache
Programmieren in Haskell
5
queens n = place 1 [1..n] [] []
place c [] ud dd = [[]]
place c rs ud dd = [q:qs |
q <- rs,
not ((q - c) ‘elem‘ ud),
not ((q + c) ‘elem‘ dd),
qs <- place (c+1) (delete q rs) ((q-c):ud)((q+c):dd)
]
delete q (x:xs) = if q == x then xs
else x:(delete q xs)
Programmieren in Haskell
6
Kapitel 5: Programmieren mit Listen
• Eigener Listen-Datentyp
• Viele nützliche Funktionen auf Listen
• Strukturelle Rekursion (auf Listen)
Programmieren in Haskell
7
Kapitel 6: Programmieren mit Listen II
• Eingebaute Listen
• Sortierfunktionen
• Strukturelle Rekursion
• Divide-and-Conquer (Teile-und-Herrsche)
• Listenbeschreibungen (list comprehensions)
Programmieren in Haskell
8
Kapitel 7: foldr und Kolleginnen
• Abgespecktes Schema der strukturellen Rekursion
• foldl und foldr
(:) -> (*)
[] -> e
a1 :(a2 :· · ·:(an−1 :(an :[]))· · ·) -> a1 *(a2 *· · ·:(an−1 *(an :e))· · ·)
Programmieren in Haskell
9
Kapitel 8: Felder
• Zugriffe in konstanter Zeit
• Funktionstabellierung (z.B. Fibonacci)
• Hashing
Programmieren in Haskell
10
Kapitel 9: Programmiermethodik
• Vom Problem zum Programm
• Spezifikation
• Lösung (Implementierung; z.B. strukturelle Rekursion)
• Verifikation (z.B. strukturelle Induktion)
Programmieren in Haskell
11
Kapitel 10: Monaden
• Sequenzierung von Berechnungen
• Berechnungen, die schiefgehen können
• Ein-/Ausgabe in Haskell
Programmieren in Haskell
12
Was ist Haskell
Haskell
• ist eine funktionale Programmiersprache
• ist seiteneffektfrei
• erfüllt “referential transparency”
• folgt einer “outermost“-Reduktionsstrategie
• implementiert “lazy evaluation”
• ist streng typisiert
• ist polymorph
• hat ein Klassensystem (Typklassen)
Programmieren in Haskell
13
• erlaubt die Definition eigener Datentypen
• erlaubt Pattern-Matching
• erlaubt gestaffelte Funktionen
• erlaubt Funktionen höherer Ordnung
• hat eine einfache Kernsprache
• hat einigen syntaktischen Zucker
• erlaubt lokale Definitionen
• hat ein Modul-System
Programmieren in Haskell
14
Ihre Aufgabe für die vorlesungsfreie Zeit (a.k.a.
Semesterferien
Üben, üben, üben!
Programmieren in Haskell
15
Herunterladen