Einleitung. 3
Teil 1: Programmiersprachen. 3
1. Haskell. 3
1.1. Allgemeines. 3
1.2. Programmieren in Haskell. 4
1.2.1 Datentypen. 4
1.2.2 Typ - Synonyme. 5
1.2.3 Grundlagen der Funktion. 5
1.2.4 Typklassen. 6
1.2.5 Liste. 7
1.2.6 Bytestring. 7
1.2.7 Tupel. 8
1.2.8 If - else, Guards und lokale Funktionen. 8
1.2.9 Funktionen höherer Ordnung. 9
1.2.10 Curry. 9
1.2.11 Pattern Matching. 10
1.2.12 Rekursion. 10
1.2.12 Module. 11
1.2.13 Ein- und Ausgabe. 11
1.2.14 Exceptions. 12
2. Allgemeines über Java. 12
Teil 2: Vergleich. 13 14
Schluss. 14
Literaturverzeichnis. 15
2
Einleitung
Auf den folgenden Seiten werde ich auf die wesentlichen Bestandteile der Programmiersprache Haskell eingehen und diese kurz an Beispielen verdeutlichen. Dabei werde ich gegebenenfalls auf Ähnlichkeiten mit der Sprache Java eingehen und beide Sprachen nochmals gezielt am Ende gegenüberstellen.
Teil 1: Programmiersprachen
1. Haskell 1.1 Allgemeines
Haskell ist eine nach dem Mathematiker und Logiker "Haskell Brooks Curry" benannte rein funktionale Programmiersprache von 1990. Wie die meisten funktionalen Programmiersprachen basiert Haskell auf dem Lambda-Kalkül, weshalb das Lambda-Zeichen auch als Logo festgelegt wurde.[7] Anfangs sollte Miranda als Grundlage dienen, jedoch waren die Entwickler nicht gewillt, den Quellcode freizugeben[4]. Ein Haskell-Programm ist im Gegensatz zu imperativen Programmiersprachen eine einzige Kette von Ausdrücken, die nach der Auswertung einen Ergebniswert liefert. Es besteht also ausschließlich aus Funktionen. Nach dem Lambda-Kalkül können jegliche Ausdrücke durch „Reduktionen“ bis zu den elementaren Ausdrücken hin vereinfacht werden[4]. Ausdrücke sind jegliche Stücke von Code, die einen Wert zurückgeben. Außerdem ist Haskell stark statisch typisiert, was bedeutet, dass jedem Ausdruck genau ein Typ zugewiesen wird, welcher bereits beim Kompilieren bekannt ist. Dadurch werden mögliche Fehler übergangen. Dies kann auch durch „type interference“ -Haskell kann also selbst auf einen Typ schließen, sodass man diesen nicht selbst bestimmen muss. Da bei der Eingabe von gleichen Argumenten die Rückgabe immer gleich ist, hängt der Ergebniswert ausschließlich von den Parametern ab. Es gibt also keine Zustandsvariablen. Haskell hat unter anderem Python und Scala beeinflusst.
3
1.2 Programmieren in Haskell
1.2.1 Datentypen
Die Datentypen für natürliche Zahlen sind in Haskell Int (begrenzte Größe) und Integer (unbegrenzte Größe). Für Kommazahlen sind diese Float und Double (größer). Genau wie in Java gibt es Bool mit den Wahrheitswerten True und False und Char und String zur Darstellung von Buchstaben und Wörtern.
Um
eigene Datentypen
zu definieren, verwendet man den Befehl
data:
data
Will man klarer machen, welcher Typ wofür steht oder will man auf die einzelnen Elemente zugreifen, ist der „record syntax“ sehr hilfreich: data Lehrer = Lehrer {vorname :: String,
Durch deriving (Show, Read) ist der Typ Lehrer eine Instanz der Typklasse Show und Read. Da Lehrer jetzt ein Teil dieser Klassen ist, kann er durch show als String dargestellt und durch read von seiner Stringdarstellung wieder in einen Datentypen umgewandelt werden. meinLehrer = Lehrer {vorname = "unbekannt",
1.2.2 Typ - Synonyme
Durch Typ-synonyme ist String als Liste von Char definiert (type String = [Char]). Man erzeugt damit keine neuen Typ, sondern lediglich ein Synonym für existierende Typen, um somit den Code lesbarer zu machen. Würde man viel mit Vektoren oder Paaren(2-Tupeln) arbeiten, könnte man diese so definieren: 1. type Vektor = [Double] 2. type Paar a b = (a, b)
1.2.3 Grundlagen der Funktion
Funktionen werde durch Gleichungen definiert und Parameter durch Leerzeichen voneinander getrennt: addieren x y = x + y
Es ist egal, in welcher Reihenfolge Funktionen definiert werden. Da Haskell rein funktional ist, sind auch Operatoren wie (+) solche.
Die Syntax einer Funktionssignatur ist wie folgt: Funktionsname :: Typ_1 -> ... -> Typ_n -> Typ_ergebnis addieren :: (Num a) => a -> a-> a
a = Typen-variable der Typklasse Num. Funktionen mit Typen-variablen werden polymorphe Funktionen genannt, solche ohne diese monomorph. Durch die Typklasse Num wird a auf Zahlen eingeschränkt. Ohne Typ-variablen könnte man es auch so schreiben: „addieren :: Int -> Int-> Int“. Dann könnte man die Funktion allerdings nur mit Zahlen des Typs Int aufrufen.
Zweistellige Funktionen können nicht nur in Präfixnotation, sondern auch in Infixnotation geschrieben werden. Bspw. kann addieren 2 3 auch als 2 'addieren' 3 geschrieben werden. In Haskell bindet Funktionsanwendung am stärksten: (head [3,4]) + (max 3 42) == head [3, 4] + max 3 42 „+“ hat einen niedrigeren Präzedenzwert als head und max (Werte werden von 1 bis 9 vergeben).
5
Arbeit zitieren:
Malte Weiss, 2011, Haskell im anschließenden Vergleich mit Java, München, GRIN Verlag GmbH
Dieser Text kann über folgende URL aufgerufen und zitiert werden:
Einbetten
DOI
Formatvorlage (Microsoft Word) für eine Diplomarbeit, Masterarbeit, Ha...
Für MS Word 2003 - Update 2010
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 25 Seiten
Formatvorlage (OpenOffice) für eine Diplomarbeit, Masterarbeit, Hausar...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 35 Seiten
Formatvorlage / Vorlage zur Erstellung einer Diplomarbeit, Bachelorarb...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 15 Seiten
Formatvorlage / Vorlage für eine Diplomarbeit / Hausarbeit
Für MS Word 2007 - dotx
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 25 Seiten
Anleitung zum Erstellen schriftlicher Arbeiten: Der Aufbau einer wisse...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 20 Seiten
Erstellen einer schriftlichen Hausarbeit
Vorlagen, Muster, Formulare, Infobroschüren
Hausarbeit, 14 Seiten
Grundtechniken wissenschaftlichen Arbeitens
Bibliografieren - Reden - Schr...
Vorlagen, Muster, Formulare, Infobroschüren
Skript, 46 Seiten
Ratgeber zur Erstellung wissenschaftlicher Arbeiten. Diplomarbeiten - ...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 39 Seiten
Informatik - Programmierung: neuer Titel erschienen: Haskell im anschließenden Vergleich mit Java
Malte Weiss hat einen neuen Text hochgeladen
Funktionale Programmierung in OPAL, ML, HASKELL und GOFER
in OPAL, ML, HASKELL und GOFER
Peter Pepper
The Battle of Gettysburg: The Eyewitness Account by Col. Frank A. Hask...
Franklin Aretas Haskell
0 Kommentare