Informatik: Einführung in Haskell - Teil 01
Released by matroid on Di. 23. Juni 2009 20:42:29 [Statistics]
Written by javaguru - 8684 x read [Outline] Printable version Printer-friendly version -  Choose language   
Informatik

\(\begingroup\)

Teil 1

Haskell als Taschenrechner

Ich möchte mit dieser kleinen Serie einen Einstieg in die Programmiersprache Haskell geben. Wer mehr Informationen zu dieser Sprache haben möchte, kann einfach in meinem Notizbuch auf den Matheplaneten weitere Informationen bekommen. Ich persönlich nutze Linux auf meinem Rechner und beschränke mich auch darauf. Mir ist aber bekannt, dass man unter haskell.org auch eine Version für Windows herunterladen kann. Es gibt zwei interaktive Haskell-Umgebungen: GHCi und Hugs. Ich persönlich bevorzuge Hugs. So werden auch die Ausgaben sich an die "Hugs-Ausgaben" halten. Ihr werdet sehen, dass sich die Ausgaben ein wenig unterscheiden.

Einleitung

Was ist denn Haskell? Haskell ist eine rein funktionale Programmiersprache, benannt nach dem US-amerikanischen Mathematiker Haskell Brooks Curry, dessen Arbeiten zur mathematischen Logik eine maßgebliche Grundlage funktionaler Programmiersprachen bilden. Haskell basiert auf dem Lambda-Kalkül, weshalb auch der griechische Buchstabe Lambda als Logo verwendet wird. Die wichtigsten Implementierungen sind der Glasgow Haskell Compiler (GHC) und Hugs, ein Haskell-Interpreter.

Installation und Starten

Zunächst müsst ihr auch unter Linux die Umgebung Hugs herunterladen und installieren. Der Download erfolgt als .rpm und sollte daher keine Probleme bei der Installation geben. Danach starten wir mal die Umgebung. Dies geschieht durch Eingabe "ghci" bzw. "hugs" auf der Kommandozeile. Nach einigen einleitenden Nachrichten melden beide Programme schliesslich ihre Bereitschaft durch den folgenden Prompt \sourceonHASKELL Hugs> \sourceoff Der Text vor dem ">" bezeichnet das gegenwärtig geladene Modul. Befehle, die sich an den Interpreter richten, also keine Haskell-Ausdrücke im eigentlichen Sinne darstellen, werden durch einen Doppelpunkt ":" eingeleitet. So kann man mit \sourceonHASKELL Hugs> :quit \sourceoff oder auch kürzer mit \sourceonHASKELL Hugs> :q \sourceoff die Programmier-Umgebung wieder verlassen. Bevor wir nun richtig beginnen, müsst ihr euch das bekannte HelloWorld-Programm in Haskell anschauen. Dazu braucht wir nun in unserer Umgebung einfach nur folgende Zeile eingeben: \sourceonHASKELL Hugs> putStr "Hello World!" \sourceoff Jetzt nehmen wir noch eine Einstellung vor, und zwar mit dem folgenden Befehl \sourceonHASKELL Hugs> :set +t \sourceoff Dies veranlasst den eigentlichen Interpreter, nach jeder Auswertung auch eine Typinformation mit auszugeben. Wir werden sofort sehen, was es damit auf sich hat mit dem folgenden Beispiel \sourceonHASKELL Hugs> 2 \sourceoff erzeugt die Ausgabe \sourceonHASKELL 2 it :: Integer \sourceoff im GHCi. Im Hugs sieht die Ausgabe geringfuegig anders aus: \sourceonHASKELL 2 :: Integer \sourceoff Beides bedeutet, dass "2" ein Ausdruck ist, der zu "2" ausgewertet wurde und vom Typ "Integer" ist, also eine ganze Zahl. Im GHCi kann man den zuletzt ausgewerteten Ausdruck mit "it" erneut referenzieren, daher erscheint das "it" auch in der Ausgabe. Hugs bietet die gleiche Funktionalitaet mittels $$. \sourceonHASKELL [GHCi] Hugs> it 2 it :: Integer [Hugs] Hugs> $$ 2 :: Integer \sourceoff Künftig werden wir hier die Hugs-Variante der Ausgabe verwenden.

Die ersten Schritte mit der Programmierumgebung

Wir machen weiter mit \sourceonHASKELL Hugs> 42.0001 42.0001 :: Double Hugs> 'c' 'c' :: Char Hugs> "Hallo" "Hallo" :: String \sourceoff und stellen fest, dass Haskell offenbar mehr Typen als "Integer" alleine kennt. Fliesskommazahlen sind ebenso möglich wie einzelne Zeichen und Zeichenketten (Strings). Ist dabei nur zu beachten, dass bei Fliesskommazahlen stets ein Dezimalpunkt zu stehen hat und kein Komma. Haskell stellt eine ganze Reihe von Funktionen zur Verfügung, die es einem erlauben, die üblichen Dinge mit Hugs zu erledigen, die man normalerweise mit einem Taschenrechner erledigt. Dabei zeigt sich sehr schnell eine grosse Stärke: der Integer-Datentyp ist nicht größenbegrenzt, wie das in anderen Sprachen der Fall ist. Wir brauchen uns also vor einer Anweisung wie \sourceonHASKELL Hugs> 42^42 \sourceoff nicht zu scheuen. Die 42ste Potenz von 42 wird ohne zu Murren ermittelt und ist, siehe da, immer noch vom Typ Integer. Haskell kennt auch die Operatoren "+", "*", "-", "/" fuer die Grundrechenoperationen. \sourceonHASKELL Hugs> 42-6*9 -12 :: Integer Hugs> 42*6-9 243 :: Integer Hugs> 42-(6*9) -12 :: Integer \sourceoff Wie man dem dritten Beispiel entnehmen kann, erlaubt Haskell auch die Klammerung von Ausdruecken. Auch \sourceonHASKELL Hugs> (42) 42 :: Integer \sourceoff ist möglich. Natürlich fallen die Klammern im Ergebnis weg, der Ausdruck "(42)" evaluiert zu "42". \sourceonHASKELL Hugs> 2.1+2.5 4.6 :: Double Hugs> 2+2.5 4.5 :: Double Hugs> 2+'c' ERROR - Cannot infer instance *** Instance : Num Char *** Expression : 2 + 'c' \sourceoff Die genaue Struktur der dabei auftretenden Fehlermeldung ist derzeit noch nicht relevant. Wichtig ist die Erkenntnis, dass Haskell bestimmte Grundannahmen über die Eingabe macht und versucht, das Geschriebene sinnvoll zu interpretieren. Ist das nicht möglich, wird ein Fehler erzeugt.

Aufgabe

Verwende den Haskell-Interpreter deiner Wahl für ein paar einfache Kalkulationen. Probiere auch andere Funktionen aus, etwa \sourceonHASKELL Hugs> pi Hugs> sin pi Hugs> abs (-2) \sourceoff oder weitere, die dir in den Sinn kommen. Vielleicht gibt es sie ja. An der Funktionsapplikation "sin pi" lässt sich erkennen, dass Haskell normalerweise keine Klammern bei Funktionsanwendungen erfordert. Bei "abs (-2)" werden die Klammern jedoch notwendig, um das unäre Minus von der normalen Subtraktion zu unterscheiden. Probiere deshalb auch einmal \sourceonHASKELL Hugs> abs -2 \sourceoff aus, was wieder eine verwirrende Fehlermeldung zur Folge haben wird.

Abschluss

Das war der erste Teil zur Einführung in die Programmiersprache Haskell. Ich hoffe, dass es auch Spaß gemacht hat und ich euch nicht gleich verschreckt habe. Wartet also gespannt auf den nächsten Teil dieser Serie.
\(\endgroup\)
Get link to this article Get link to this article  Printable version Printer-friendly version -  Choose language     Kommentare zeigen Comments  
pdfFür diesen Artikel gibt es keine pdf-Datei


Arbeitsgruppe Alexandria Dieser Artikel ist im Verzeichnis der Arbeitsgruppe Alexandria eingetragen:
: Informatik :: automatisch eingefügt und unbearbeitet :
Einführung in Haskell - Teil 01 [von javaguru]  
Teil 1 Haskell als Taschenrechner Ich möchte mit dieser kleinen Serie einen Einstieg in die Programmiersprache Haskell geben. Wer mehr Informationen zu dieser Sprache haben möchte, kann einfach in meinem Notizbuch auf den Matheplaneten weitere Informationen bekommen. Ich persönlich nutz
[Die Arbeitsgruppe Alexandria katalogisiert die Artikel auf dem Matheplaneten]

 
 
Aufrufzähler 8684
 
Aufrufstatistik des Artikels
Insgesamt 482 externe Seitenaufrufe zwischen 2012.01 und 2021.10 [Anzeigen]
DomainAnzahlProz
https://google.com102.1%2.1 %
https://google.ru10.2%0.2 %
https://www.bing.com30.6%0.6 %
http://google.de44492.1%92.1 %
http://google.ro81.7%1.7 %
https://duckduckgo.com40.8%0.8 %
https://suche.t-online.de10.2%0.2 %
http://google.com10.2%0.2 %
http://suche.web.de10.2%0.2 %
http://www.ecosia.org10.2%0.2 %
http://isearch.avg.com10.2%0.2 %
http://www.bing.com10.2%0.2 %
http://search.incredibar.com10.2%0.2 %
http://suche.t-online.de10.2%0.2 %
http://search.conduit.com10.2%0.2 %
http://google.ch10.2%0.2 %
http://www.amazon.de10.2%0.2 %
https://google.de10.2%0.2 %

Aufrufer der letzten 5 Tage im Einzelnen
Insgesamt 1 Aufruf in den letzten 5 Tagen. [Anzeigen]
DatumAufrufer-URL
2021.10.24 22:54https://google.com/

Häufige Aufrufer in früheren Monaten
Insgesamt 459 häufige Aufrufer [Anzeigen]
DatumAufrufer-URL
2013-2018 (176x)http://google.de/url?sa=t&rct=j&q=
201210-10 (53x)http://google.de/url?sa=t&rct=j&q=potenz haskell
201211-11 (34x)http://google.de/webhp?
201311-11 (24x)http://google.de/url?sa=t&rct=j&q=haskell einstieg
201201-07 (22x)http://google.de/url?sa=t&rct=j&q=potenz in haskell
201205-05 (21x)http://google.de/url?sa=t&rct=j&q=potenzieren in haskell
201212-12 (19x)http://google.de/url?sa=t&rct=j&q=poweroftwo haskell potenz
201305-05 (16x)http://google.de/url?sa=t&rct=j&q=huskell einstieg
201304-04 (16x)http://google.de/url?sa=t&rct=j&q=haskell vorgänger zahl
2012-2013 (16x)http://google.de/url?sa=t&rct=j&q=haskell potenz
201301-01 (12x)http://google.de/url?sa=t&rct=j&q=potenzen haskell
201202-02 (10x)http://google.de/url?sa=t&rct=j&q=Winhugs grundbefehle
2020-2021 (9x)https://google.com/
201401-01 (8x)http://google.ro/url?sa=t&rct=j&q=
201302-02 (6x)http://google.de/url?sa=t&rct=j&q=potenzierung in haskell
201206-06 (6x)http://google.de/url?sa=t&rct=j&q=haskell potenzen
201203-03 (6x)http://google.de/url?sa=t&rct=j&q=informatik haskell java
201204-04 (5x)http://google.de/url?sa=t&rct=j&q=haskell programm starten

[Top of page]

"Informatik: Einführung in Haskell - Teil 01" | 6 Comments
The authors of the comments are responsible for the content.

Re: Einführung in Haskell - Teil 01
von: matph am: Mi. 24. Juni 2009 13:47:06
\(\begingroup\)Hallo, Vielleicht für alle noch entsprechende Links smile-- mfg matph\(\endgroup\)
 

Re: Einführung in Haskell - Teil 01
von: Tino am: Do. 25. Juni 2009 20:29:21
\(\begingroup\)Wer sich fragt, warum er eine Funktionale Programmiersprache lernen sollte findet eventuell hier eine Antwort: www.defmacro.org/ramblings/fp.html (Abschnitt: Benefits of FP)\(\endgroup\)
 

Re: Einführung in Haskell - Teil 01
von: matph am: Fr. 26. Juni 2009 16:10:17
\(\begingroup\)Hallo, Zum lernen von Haskell (für Programmierer) so wie diesem Zusammenhang ist sicherlich ebenfalls das Buch Real World Haskell sehr interessant. Auch hier ist der erste Abschnitt Why functional programming? Why Haskell? -- mfg matph\(\endgroup\)
 

Re: Einführung in Haskell - Teil 01
von: Ueli am: Di. 30. Juni 2009 20:08:27
\(\begingroup\)Ich habe noch nie etwas von funktionalem programmieren gehört. Auch nach dem Durchgucken der Links bin ich noch nicht so recht schlau geworden. Also ich stelle mir mal einen Bahnhof mit Geleisesteuerung vor. Bedeutet das nun, dass alle Input-Zustände (Zugpositionen, Weichenstellungen) gespeichert bleiben, bis der Output (neue Weichenstellungen) erfolgt ist. Gibt es auch Zwischenresultate? Gruss Ueli\(\endgroup\)
 

Re: Einführung in Haskell - Teil 01
von: matph am: Di. 30. Juni 2009 21:26:17
\(\begingroup\)Hallo Ueli, Funktionale Programmierung bedeutet, dass Programme durch das Auswerten von Ausdrücken laufen. Dies steht im Kontrast zur imperativen Programmierung, wo Programme aus Anweisungen bestehen, welche den globalen Zustand beim Ausführen verändern. Siehe auch: Functional programming (haskellwik) Functional programming (wikipedia) Imperative programming (wikipedia) -- mfg matph\(\endgroup\)
 

Re: Einführung in Haskell - Teil 01
von: neovo am: Do. 16. Juli 2009 00:00:03
\(\begingroup\)Hallo, hier ein kleiner Abschnit aus "ML for the working programmer" (ML bzw. SML ist ein vorgänger von Haskell ...) : Seite 4, Abschnit 1.2: What are functional programs like? Functional programs work with values, not states. Their tools are expressions, not commands. How can assignments, arrays and loops be dispensed with? Does not the outside world have state? These questions pose real challenges, but the functional programmer can exploit a wide range of data structures and techniques to solve problems. \(\endgroup\)
 

 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]