Einstieg in Haskell



  • Hallo zusammen

    Nachdem ich mich bei den C-ähnlichen Sprachen etwas auskenne, möchte ich meinen Horizont erweitern und nebenbei mal was ganz anderes versuchen. Ich habe dabei an die Programmiersprache Haskell gedacht, da ich das Konzept der funktionalen Programmierung sehr interessant finde und glaube, dass mir die Sprache recht zusagt (auch von den theoretischen Hintergründen her).

    Nun, zu was ratet ihr mir? Dass es lange dauern wird und eine rechte Umstellung mit sich bringt, ist mir bewusst, das nehme ich gerne in Kauf. Ich habe auch genügend Zeit und Geduld. Könnt ihr mir gute Einstiegsbücher in die Sprache empfehlen?

    Wahrscheinlich werde ich mich mit der Zeit sowieso an ein Haskell-Forum wenden, aber ich dachte, vielleicht weiss jemand hier gerade etwas, zum Beispiel weil er selber schon entsprechende Erfahrungen gemacht hat. Und eventuell gibts ja spezielle Tipps, die man beachten sollte, wenn man von C++, Java & Co. kommt.



  • Disclaimer: Ich habe keine Ahnung von Haskell, habe bis jetzt nur ein bisschen damit gespielt.

    Aber ich finde http://learnyouahaskell.com/ recht nett. (Im Wesentlichen einfach ein Klon von _why's Poignant Guide to Ruby.)



  • In den Nachrichtenkanaelen in denen ich mich ueber Haskell informiert habe, wurde Real World Haskell immer sehr hoch gepriesen. Ich habe Haskell auch damit gelernt und kann es nur weiterempfehlen.

    (Gibts gebunden oder als freies eBook)



  • Vielen Dank für die Antworten.

    Real World Haskell sieht gut aus. Vermutlich werde ich das bestellen, ich erkundige mich noch ein wenig. Ein Online-Tutorial ist sicher auch hilfreich nebenbei, aber ich möchte hauptsächlich über ein Buch lernen und das Tutorial eher als Ergänzung ansehen. Danke auf jeden Fall für die Links.

    Weitere Vorschläge sind natürlich immer willkommen!



  • wenns nicht unbedingt haskell sein muss sondern dir einfach nur drum geht deinen Horizont zu erweitern in Hinsicht darauf, was es so im Reich der Programmiersprachen alles geben kann, dann kann ich einerseits "Essentials of Programmin Languages" empfehlen, wo man nebenbei einen Einstieg in Scheme findet, zum Anderen bin ich sehr begeistert von "Concepts, Techniques and Models od Computer Programming", wo im Detail auf die unterschiedlichsten gebräuchlichen Programmier- und Sprachparadigmen eingegangen wird. Die dort eingesetzte Sprache OZ ist zwar in meinen Augen nicht unbedingt praxistauglich, aber ich denke die Lektüre des Buchs macht es sehr viel einfacher, die doch recht unterschiedlichen Denkweisen hinter den verschiedensten Sprachen zu verstehen.



  • RWH sieht gut aus (allerdings bin ich auch blutiger Anfänger in Haskell).

    Was den Horizont angeht, habe ich neulich PLAI gelesen, und es hat mir sehr gut gefallen:
    http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/

    Wenn du in Lisp sattelfest bist, kann ich dir auch Qi empfehlen, ist Haskell sehr sehr ähnlich, nur daß es ein Lisp ist:
    http://www.lambdassociates.org/Book/page000.htm

    Das ist ein wenig OT, sorry.



  • Jetzt hab ich dir zwar zwei Bücher verlinkt, aber in denen drehen sich insgesamt nur 10 Seiten um die Haskell-Syntax. 🙄

    Deshalb, falls du noch nicht darüber gestolpert bist, noch ein Link:
    http://www.haskell.org/haskellwiki/Books_and_tutorials

    Dort gibt es sehr viel Information.



  • Vorerst möchte ich mich eigentlich auf Haskell und das Paradigma der funktionalen Programmierung beschränken. Nicht zu viel aufs Mal, schliesslich möchte ich nebenbei auch weiterhin prozedural-objektorientiert-generisch programmieren... 😉

    Allerdings werde ich mir die von euch vorgeschlagenen Bücher über Programmierkonzepte allgemein merken; gut möglich, dass ich später genau sowas brauche. Danke auch euch beiden. Ich speichere diesen Thread mal unter den Favoriten im Ordner "nützliche Threads". 🙂



  • Ich habe dabei an die Programmiersprache Haskell gedacht ... Paradigma der funktionalen Programmierung beschränken ... ich nebenbei auch prozedural-objektorientiert-generisch programmieren

    Haskell ist eine gute Wahl. Ich lese zur Zeit The Haskell Road to Logic, Maths and Programming. Es wird nicht alles behandelt, was Haskell zu bieten hat, aber ich finde es sehr gut. Es beschraenkt sich auf den funktionalen Aspekt, ist aber auch viel mehr als nur ein Buch ueber eine Programmiersprache. Meine Vorkenntnisse in Scheme und allgemein in Funktionaler Programmierung machen es mir dabei etwas leichter. Da Concepts, Techniques, and Models of Computer Programming erwaehnt wurde, sei noch auf Programming Paradigms for Dummies: What Every Programmer Should Know hingewiesen.

    Aber vielleicht ist auch ein Blick auf Scheme interessant, da du dort prozedural-objektorientiert-generisch beliebig mischen kannst.



  • Inzwischen habe ich mir "Programming in Haskell" von Graham Hutton zugelegt. Ich habe bereits einiges gelernt und finde das Buch sehr gut für den Einstieg. Vorerst möchte ich weiterhin mit Haskell ein wenig herumexperimentieren, bevor ich erneut eine andere Programmiersprache anschaue. Aber vielen Dank für den PDF-Link, knivil!

    P.S.: Ich finde es zum Teil wirklich erstaunlich, wie simpel und intuitiv gewisse Probleme mit Haskell zu lösen sind. Ich kenne mich noch nicht sehr gut aus, aber bereits einfache Beispiele haben mich schon recht fasziniert. 😉



  • Ich bin auch gerade dabei Haskell zu lernen und die Sprache ist wirklich klasse 🙂

    Was ich cool finde sind unendliche Listen wie

    [1..] -- alle natürlichen Zahlen
    

    .



  • The-Kenny schrieb:

    In den Nachrichtenkanaelen in denen ich mich ueber Haskell informiert habe, wurde Real World Haskell immer sehr hoch gepriesen. Ich habe Haskell auch damit gelernt und kann es nur weiterempfehlen.

    Das habe ich auch im Regal stehen, ich bin allerdings noch nicht dazugekommen, es zu lesen. Nur gelegentlich habe ich Kleinigkeiten nachgesehen - z.B., um map und fold in Delphi zu implementieren. Anonyme Methoden regeln 🙂

    Wenn ich mal wieder einen halben Monat Zeit habe, werde ich das Buch auch mal lesen; ich finde Haskell überaus interessant und nützlich. Mein To-Do-Bücherbrett ist ohnehin ganz gut beladen, größtenteils allerdings mit Belletristik 😃



  • Ich musste Haskell in der Uni lernen und finde die Sprache ganz schick um funktionale Programmierkonzepte zu erlernen. Uns wurde als Buch "The Craft of Functional Programming" von Simon Thompson ans Herz gelegt. Das Buch kann ich empfehlen, auch wenn es nicht ganz billig ist. Interessant an Haskell ist auch noch, dass es eine der wenigen funktionalen Programmiersprachen ist, die auch noch in der Praxis eingesetzt wird.



  • Es gibt viele gute Quellen zu Haskell, hier ist ein weiteres Tutorial: Learn You a Haskell for Great Good!. Was ich an ihr mag: das Bunte ...

    Ich kenne mich noch nicht sehr gut aus, aber bereits einfache Beispiele haben mich schon recht fasziniert.

    Ja! Ich habe auch angefangen, mich durch Monads durchzuarbeiten (unabdingbar) und habe auch eine neue Moeglichkeit der Fehlerbehandlung entdeckt (click). Gewiss kann man das an gegebener Stelle auch in anderen Programmiersprachen nachbilden, aber auf die Idee waere ich z.B. in C++ nie gekommen. (Auch werden manche sagen ... alter Hut ... nichts besonderes ... geht viel einfacher in ??? ... aber ich denke an komplexere Beispiele 🙂 )



  • @Nexus: Wir hatten Haskell jetzt im 1. und 2.Semester und eigentlich ist diese Prog'Lang ganz super, wenn du magst kann ich dir ein eBook geben:

    "Addison Wesley Haskell The Craft Of Functional Programming"

    [Edit]:
    Achja evtl. sollte ich hier noch meine eigene Meinung über Haskell schreiben, kurz und knackig.
    Man kann ziemlich simple die verschiedensten Algorithmen konzipieren. Hier Zwei super Beispiele

    Quicksort in "einer" Zeile:

    qsort :: Ord a => [a] -> [a]
    qsort []     = []
    qsort (x:xs) = qsort kleiner ++ [x] ++ qsort groesser
                   where
                     kleiner  = [y | y <- xs, y < x]
                     groesser = [y | y <- xs, y >= x]
    

    Und noch toller PowerSet (Potenzmenge):

    powerset [] = [[]]
    powerset (x:xs) = powerset xs ++ map (x:) (powerset xs)
    

    Versucht das mal in Java oder C++ 😉

    Weitere Pluspunkte sind sicherlich, dass Arbeiten mit Curry-Funktionen, Übergeordneten-Funktionen und die Lazy-Evaluation.

    Eine andere funktionale Prog'Lang die ich auch recht interessant fand war Scheme, allerdings seeeeeehrrr klammerlastig.

    Lg Tobi



  • T0bi schrieb:

    Und noch toller PowerSet (Potenzmenge):

    powerset [] = [[]]
    powerset (x:xs) = powerset xs ++ map (x:) (powerset xs)
    

    Versucht das mal in Java oder C++ 😉

    Benötigt man in diesen Sprachen auch gar nicht, da man dort ein ganz anderes Programmierparadigma verfolgt. Daher ist das Beispiel für einen Vergleich eher ungeeignet.



  • Hm stimmt schon, wir hatten aber mal eine Aufgabe bei der es darum ging alle möglichen Subsequenzen eines Wortes zu bestimmen, dazu sollten wir einen Algorithmus einmal in Haskell und einmal in Java gestallten. In beiden Fällen hatte ich es mit Powerset lösen wollen 😕

    Lg Tobi



  • Ich bin sicher, wenn man das eBook moechte ohne zu bezahlen, dann findet man das allein im Netz. Das Buch scheint sein Geld wert zu sein. Der Autor scheint dich nicht bescheissen zu wollen, also bescheisse auch den Autor nicht. 🙂



  • @T0bi
    😡
    Poste hier bitte keine Links zu irgend welchen Downloads von urheberrechtlich geschützten eBooks! Nicht nur schadest du dem Autor, auch das Forum wird gefährdet, ganz zu schweigen von rechtlichen Konsequenzen für dich (Stichwort: Abmahnung!). Also denk nach und lass so etwas sein.



  • Entschuldige hab für ein kleinen Augenblick vergessen in welchen Forum ich verkehre. Wird nicht wieder vorkommen.

    Lg Tobi


Anmelden zum Antworten