Sie sind hier
E-Book

Haskell-Intensivkurs

Ein kompakter Einstieg in die funktionale Programmierung

AutorAdrian Neumann, Marco Block
VerlagSpringer-Verlag
Erscheinungsjahr2011
Seitenanzahl300 Seiten
ISBN9783642047183
FormatPDF
KopierschutzWasserzeichen
GerätePC/MAC/eReader/Tablet
Preis39,99 EUR

Das Buch bietet eine kompakte Einführung in die funktionale Programmierung mit Haskell. Die Autoren vermitteln zunächst anhand von Beispielen grundlegende Konzepte, die das Fundament für die funktionale Programmentwicklung bilden. Anschließend werden fortgeschrittene Aspekte behandelt und zahlreiche neue Anwendungen und Themengebiete vorgestellt. Mit Übungsaufgaben zu jedem Kapitel und Lösungen am Ende des Buchs kann der Stoff auch im Selbststudium erarbeitet werden. Die Webseite zum Buch enthält Beispiele und weitere Materialien.

Kaufen Sie hier:

Horizontale Tabs

Blick ins Buch
Inhaltsverzeichnis
1 Motivation und Einführung20
1.1 Funktionale Programmierung21
1.1.1 Motivation und Anwendung21
1.1.2 Warum gerade Haskell?22
1.2 Grundbegriffe und Prinzipien der Programmentwicklung22
1.3 Installation und Verwendung von Haskell23
1.3.1 Installation der aktuellen Version24
1.3.2 Die ersten Schritte in Hugs25
1.3.3 Arbeiten auf der Konsole25
1.3.4 Die Entwicklungsumgebung winhugs26
1.3.5 Erstellung und Verwendung von Skripten27
1.4 Haskell ist mehr als ein Taschenrechner28
1.5 Vordefinierte Funktionen der Prelude29
Teil I Haskell-Grundlagen31
2 Einfache Datentypen32
2.1 Wahrheitswerte33
2.1.1 Negation34
2.1.2 Konjunktion34
2.1.3 Disjunktion35
2.1.4 Exklusiv-Oder35
2.1.5 Boolesche Algebra36
2.1.6 Boolesche Gesetze36
2.2 Zahlentypen38
2.2.1 Datentyp Int38
2.2.2 Datentyp Integer39
2.2.3 Datentypen Float und Double40
2.3 Zeichen und Symbole40
2.4 Übungsaufgaben41
3 Funktionen und Operatoren42
3.1 Funktionen definieren43
3.1.1 Parameterübergabe44
3.1.2 Reservierte Schlüsselwörter45
3.1.3 Wildcards45
3.1.4 Signaturen und Typsicherheit46
3.1.5 Pattern matching47
3.1.6 Pattern matching mit case48
3.1.7 Lokale Definitionen mit where48
3.1.8 Lokale Definitionen mit let-in49
3.1.9 Fallunterscheidungen mit Guards50
3.1.10 Fallunterscheidungen mit if-then-else51
3.1.11 Kommentare angeben51
3.2 Operatoren definieren52
3.2.1 Assoziativität und Bindungsstärke52
3.2.2 Präfixschreibweise – Operatoren zu Funktionen53
3.2.3 Infixschreibweise – Funktionen zu Operatoren54
3.2.4 Eigene Operatoren definieren54
3.3 Lambda-Notation55
3.4 Übungsaufgaben56
4 Rekursion als Entwurfstechnik57
4.1 Rekursive Fakultätsfunktion58
4.2 Lineare Rekursion59
4.3 Kaskadenförmige Rekursion60
4.4 Verschachtelte Rekursion61
4.5 Wechselseitige Rekursion62
4.6 Endständige Rekursion62
4.7 Übungsaufgaben62
5 Einfache Datenstrukturen64
5.1 Listen65
5.1.1 Zerlegung in Kopf und Rest66
5.1.2 Rekursive Listenfunktionen68
5.1.3 Zusammenfassen von Listen70
5.1.4 Automatische Erzeugung von Listen71
5.1.5 Automatisches Aufzählen von Elementen72
5.1.6 Lazy evaluation74
5.1.6.1 Unendliche Listen74
5.1.6.2 Das Sieb des Eratosthenes75
5.1.7 Listen zerlegen76
5.2 Tupel77
5.2.1 Beispiel pythagoräisches Tripel78
5.2.2 Beispiel n-Dameproblem79
5.3 Zeichenketten80
5.4 Übungsaufgaben82
6 Funktionen höherer Ordnung83
6.1 Mapping85
6.2 Filtern86
6.3 Faltung87
6.3.1 Faltung von rechts mit Startwert88
6.3.2 Faltung von rechts ohne Startwert91
6.3.3 Faltung von links mit Startwert92
6.3.4 Faltung von links ohne Startwert93
6.3.5 Unterschied zwischen Links- und Rechtsfaltung93
6.4 Entfaltung94
6.4.1 Definition von unfold94
6.4.2 Mapping durch unfold95
6.5 Zip96
6.6 Unzip96
6.7 Funktionskompositionen97
6.8 Currying99
6.9 Übungsaufgaben101
7 Eigene Typen und Typklassen definieren102
7.1 Typsynonyme mit type103
7.2 Einfache algebraische Typen mit data und newtype104
7.2.1 Datentyp Tupel107
7.2.2 Datentyp Either107
7.2.3 Datentyp Maybe108
7.2.4 Datentypen mit mehreren Feldern109
7.3 Rekursive Algebraische Typen111
7.4 Automatische Instanzen von Typklassen112
7.4.1 Typklasse Show113
7.4.2 Typklasse Read113
7.4.3 Typklasse Eq114
7.4.4 Typklasse Ord114
7.4.5 Typklasse Enum114
7.4.6 Typklasse Bounded115
7.5 Eingeschränkte Polymorphie115
7.6 Manuelles Instanziieren115
7.7 Projekt: Symbolische Differentiation118
7.7.1 Operatorbaum119
7.7.2 Polynome berechnen120
7.7.3 Ableitungsregeln120
7.7.4 Automatisches Auswerten121
7.8 Eigene Klassen definieren122
7.9 Übungsaufgaben123
8 Modularisierung und Schnittstellen124
8.1 Module definieren125
8.2 Sichtbarkeit von Funktionen125
8.3 Qualified imports127
8.4 Projekt: Adressbuch127
8.4.1 Modul Woerterbuch127
8.4.2 Modul Adressbuch128
8.4.3 Modul TestAdressbuch129
8.5 Übungsaufgaben130
Teil II Fortgeschrittene Haskell-Konzepte132
9 Laufzeitanalyse von Algorithmen133
9.1 Motivation134
9.2 Landau-Symbole135
9.2.1 Obere Schranken O135
9.2.2 Starke obere Schranken o136
9.2.3 Untere Schranken136
9.2.4 Starke untere Schranken137
9.2.5 Asymptotisch gleiches Wachstum137
9.2.6 Definition über Grenzwerte von Quotientenfolgen137
9.3 Umgang mit Schranken und Regeln137
9.4 Übersicht wichtiger Laufzeiten139
9.5 Best, Worst und Average Case139
9.6 Analysieren der Laufzeit139
9.6.1 Fakultätsfunktion140
9.6.2 Elemente in Listen finden141
9.6.3 Listen umdrehen142
9.6.4 Potenzen143
9.6.5 Minimum einer Liste145
9.7 Übungsaufgaben147
10 Arrays, Listen und Stacks148
10.1 Arrays149
10.1.1 Statische Arrays149
10.1.2 Dynamische Arrays151
10.2 Liste und Stack152
10.3 Listen sortieren153
10.3.1 SelectionSort153
10.3.2 InsertionSort154
10.3.3 BubbleSort155
10.3.4 QuickSort157
10.3.5 MergeSort159
10.3.6 BucketSort160
10.3.7 RadixSort161
10.4 Algorithmen auf Stacks163
10.4.1 Umgekehrte Polnische Notation163
10.4.2 Projekt: Klammertest164
10.5 Übungsaufgaben166
11 Warteschlangen167
11.1 Implementierung über Listen168
11.2 Amortisierte Laufzeitanalyse169
11.2.1 Bankiermethode169
11.2.2 Analyse der Warteschlange170
11.3 Erweiterung um Lazy Evaluation170
11.4 Angepasste amortisierte Analyse171
11.5 Beispielanwendung173
11.6 Übungsaufgaben173
12 Bäume174
12.1 Implementierung der Datenstruktur Baum175
12.2 Balancierte Bäume176
12.3 Traversierungen177
12.3.1 Pre-, In- und Postorder177
12.3.2 Levelorder178
12.4 Übungsaufgaben179
13 Wörterbücher180
13.1 Analyse und Vorüberlegungen181
13.2 Implementierung182
13.3 Laufzeitanalyse183
13.4 Übungsaufgaben184
14 Prioritätswarteschlangen186
14.1 Operationen und mögliche Umsetzungen187
14.2 Realisierung mit einer Liste187
14.3 Realisierung mit einem Binärbaum187
14.4 Zwei Bäume verschmelzen189
14.5 Amortisierte Laufzeitanalyse von merge190
14.6 Beispielanwendung191
14.7 Übungsaufgaben192
15 Random-Access Listen193
15.1 Realisierung mit einem Suchbaum194
15.1.1 Preorder versus Inorder bei Binärbäumen194
15.1.2 Liste vollständiger Binärbäume195
15.1.3 Verschmelzen mit Greedy-Strategie195
15.2 Implementierung der grundlegenden Listenfunktionen197
15.3 Implementierung von elementAn198
15.4 Beispielanwendung199
15.5 Übungsaufgaben200
16 Graphen201
16.1 Definition und wichtige Begriffe202
16.2 Abstrakter Datentyp Graph203
16.2.1 Adjazenzliste und Adjazenzmatrix203
16.2.2 Implementierung der Adjazenzliste204
16.3 Algorithmen auf Graphen205
16.3.1 Traversieren von Graphen206
16.3.1.1 Tiefensuche im Graphen207
16.3.1.2 Breitensuche im Graphen208
16.3.1.3 Implementierung von Tiefen- und Breitensuche208
16.3.2 Topologisches Sortieren212
16.4 Übungsaufgaben215
17 Monaden216
17.1 Einführung und Beispiele217
17.1.1 Debug-Ausgaben217
17.1.1.1 Rückgabewert und Funktionskomposition217
17.1.1.2 Eigene Eingabetypen definieren218
17.1.1.3 Identitätsfunktion218
17.1.2 Zufallszahlen219
17.2 Monaden sind eine Typklasse220
17.3 do-Notation221
17.3.1 Allgemeine Umwandlungsregeln221
17.3.2 Umwandlungsregeln für if-then-else222
17.3.3 Beispiel223
17.4 Vordefinierte Monaden224
17.4.1 Monade Writer224
17.4.2 Monade Reader225
17.4.3 Monade State227
17.4.4 Monade List229
17.5 Ein- und Ausgaben231
17.5.1 Stream-basierte Eingaben231
17.5.2 Monade IO232
17.5.2.1 Bildschirmausgaben233
17.5.2.2 Tastatureingaben234
17.5.2.3 Eingabepufferung234
17.5.2.4 Beispiel: Hangman235
17.5.3 Dateien ein- und auslesen237
17.6 Übungsaufgaben238
18 Programme verifizieren und testen240
18.1 Beweis durch vollständige Induktion241
18.1.1 Die fünf Peano-Axiome241
18.1.2 Beweiskonzept242
18.1.2.1 Gaußsche Summenformel242
18.1.2.2 Vier- und Fünf-Euro-Münze243
18.1.2.3 Fakultätsfunktion243
18.1.3 Vollständige Induktion über Strukturen244
18.1.3.1 Induktion über Listen245
18.1.3.2 Induktion über Bäume246
18.2 QuickCheck247
18.2.1 Beispiel: Sortieren248
18.2.2 QuickCheck für eigene Typen verwenden249
18.2.3 Testdatengeneratoren249
18.3 Übungsaufgaben250
19 Berechenbarkeit und Lambda-Kalkül252
19.1 Der Lambda-Kalkül253
19.2 Formale Sprachdefinition253
19.2.1 Bezeichner253
19.2.2 -Funktion254
19.2.3 Applikation254
19.2.4 Reguläre -Ausdrücke254
19.3 Freie und gebundene Variablen255
19.4 -Ausdrücke auswerten255
19.4.1 -Konversion255
19.4.2 -Reduktion256
19.5 Boolesche Algebra257
19.5.1 True und False257
19.5.2 Negation258
19.5.3 Konjunktion und Disjunktion258
19.6 Tupel258
19.6.1 2-Tupel259
19.6.2 First und Second259
19.7 Listen259
19.7.1 Head – Kopf einer Liste260
19.7.2 Tail – Rest einer Liste260
19.7.3 Empty – Test auf eine leere Liste und Nil260
19.8 Arithmetik261
19.8.1 Natürliche Zahlen261
19.8.2 Zero – Der Test auf Null261
19.8.3 S – Die Nachfolgerfunktion262
19.8.4 Die Addition263
19.8.5 Die Multiplikation264
19.8.6 Die Vorgängerfunktion264
19.9 Rekursion265
19.9.1 Alternative zu Funktionsnamen265
19.9.2 Fixpunktkombinatoren266
19.10 Projekt: -Interpreter267
19.10.1 -Ausdrücke repräsentieren268
19.10.2 Auswerten von -Ausdrücken268
19.10.3 Freie und gebundene Variablen270
19.10.4 Wörterbuch für Substitutionen270
19.10.5 -Parser272
19.11 Übungsaufgaben274
Lösungen der Aufgaben275
Literaturverzeichnis283
Sachverzeichnis286

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

Berufsstart Bewerbung

Berufsstart Bewerbung

»Berufsstart Bewerbung« erscheint jährlich zum Wintersemester im November mit einer Auflage von 50.000 Exemplaren und ermöglicht Unternehmen sich bei Studenten und Absolventen mit einer ...

Bibel für heute

Bibel für heute

BIBEL FÜR HEUTE ist die Bibellese für alle, die die tägliche Routine durchbrechen wollen: Um sich intensiver mit einem Bibeltext zu beschäftigen. Um beim Bibel lesen Einblicke in Gottes ...

BIELEFELD GEHT AUS

BIELEFELD GEHT AUS

Freizeit- und Gastronomieführer mit umfangreichem Serviceteil, mehr als 700 Tipps und Adressen für Tag- und Nachtschwärmer Bielefeld genießen Westfälisch und weltoffen – das zeichnet nicht ...

caritas

caritas

mitteilungen für die Erzdiözese FreiburgUm Kindern aus armen Familien gute Perspektiven für eine eigenständige Lebensführung zu ermöglichen, muss die Kinderarmut in Deutschland nachhaltig ...

building & automation

building & automation

Das Fachmagazin building & automation bietet dem Elektrohandwerker und Elektroplaner eine umfassende Übersicht über alle Produktneuheiten aus der Gebäudeautomation, der Installationstechnik, dem ...

FileMaker Magazin

FileMaker Magazin

Das unabhängige Magazin für Anwender und Entwickler, die mit dem Datenbankprogramm Claris FileMaker Pro arbeiten. In jeder Ausgabe finden Sie von kompletten Lösungsschritten bis zu ...