1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Haskell sinnvoll?

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Tengu, 14.02.07.

  1. Tengu

    Tengu Apfel der Erkenntnis

    Dabei seit:
    05.02.07
    Beiträge:
    721
    Hi allerseits!

    An meiner Uni gibts jetzt nächstes Jahr so ein Proseminar für Haskell. Ist das irgendwie sinnvoll, also wird das eingesetzt, oder ist das so en reiner Theoriemist, den ich gar nicht brauche?
    Dieses freiwillige Seminar geht ein Semester, man kriegt so nen Schein. Das nennt sich "Sitzschein", d. h. ich höre zu, wie jeder reihum mal ein Referat hält und das wars. Hört sich ja nett an, denk ich...

    Ist das eine sinnvolle Ergänzung zu Java, C++ und was nicht alles oder ist das tote Theorie, die nirgendwo genutzt wird? Der Professor behauptete, damit könne man viel schneller viel mehr Features einbauen in Programme als mit anderen Programmiersprachen... der redet aber gern so Zeug. ;)

    Und, wie sieht das mit Haskell auf dem Mac aus?

    Gruß,
    Mark
     
  2. schlingel

    schlingel Melrose

    Dabei seit:
    06.06.04
    Beiträge:
    2.483
    Haskell selbst wird nicht mehr genutzt, bzw kaum. Es ist praktisch, weil sich Mathematische Algorithmen fas 1:1 abbilden lassen. Da es in Haskell keine Schleifen gibt, lernst Du hier das meistern von Rekursionen wie in keiner anderen Sprache. Und Rekursionen können enorm hilfreich sein und sind oftmals effizienter als Schleifen.

    Hugs gibt es auch für den Mac.
     
  3. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Einspruch, Euer Ehren. Ich behaupte das exakte Gegenteil. ;)

    Jede Rekursion lässt sich durch Schleifen abbilden, und das wesentlich effizienter im Laufzeitverhalten. Vielleicht nicht ganz so übersichtlich, OK.

    P.S.: Ich ärgere mich z.B. jedes Mal, wenn Informatiker in unserer Numerik-Vorlesung in den Programmieraufgaben Haskell-Code abgeben. In fast allen Fällen ist Haskell viel zu speicherhungrig und zu langsam.
     
  4. schlingel

    schlingel Melrose

    Dabei seit:
    06.06.04
    Beiträge:
    2.483
    Hmm wie du meinst...
    Ich hingegen finde Schleifen sehr viel übersichtlicher.

    Einen Vorteil den Haskell gegenüber anderen Programmiersprachen hat ist die Möglichkeit mit viel grösseren Zahlen zu hantieren.
     
  5. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Das wäre ja dann ein Punkt gegen Haskell. :-D
    Ganze Zahlen oder Gleitkommazahlen?
     
  6. schlingel

    schlingel Melrose

    Dabei seit:
    06.06.04
    Beiträge:
    2.483
    Ja auf jeden Fall! Ich persönlich hasse Haskell über alles, bin aber trotzdem der Meinung es war gut es gelernt zu haben, da es das Rekursionsverständnis schon verbessert.
    Integers
     
  7. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    OK. So würde ich das auch unterschreiben. Es kommt halt immer auf den Einsatzzweck an.
     
  8. mullzk

    mullzk Linsenhofener Sämling

    Dabei seit:
    04.01.04
    Beiträge:
    2.529
    a) haskell auf dem mac ist kein problem. es gibt verschiedene implementationen, ich kam mit HUGS gut zurecht.

    b) haskell-kurse sind nur schon deshalb gut, weil sie einem aufzeigen, dass es auch noch andere programmier-konzepte als das ewige prozedurale und objektorientierte, was man sonst immer braucht. und im gegensatz zu prolog und konsorten ist es ein cooles konzept.

    c) von allen sprachen, denen ich bisher über den weg gelaufen bin, scheint mir haskell die eleganteste. nicht die schnellste, nicht die praktischte etc., aber die eleganteste.

    d) es gibt gewisse bereiche, wo du mit haskell schneller eine implementation beieinander haben wirst ( != eine schnellere implementation). allerdings nur in einigen wenigen bereichen, denn seien wir ehrlich - für grundlegende sachen greift man in c, java & co auf libraries zurück, und bei den nicht grundlegenden sachen kann haskell manchmal ziemlich ein brainfuck sein. schlichtwegs gelogen hingegen scheint mir die aussage, dass man schnell 'features' reinbaut. features - zumindest so wie ich sie verstehe - sind typisch für sprachen, wo man schnell eine routine aufrufen kann oder ein objekt anhängt. haskell-programme sind in aller regel sehr stark auf ein ziel ausgerichtet. und sachen wie desktop-applikationen sind in haskell sehr schnell ein sehr übler murks (ganz im gegensatz zu webapplikationen, wo funktionale sprachen IMHO den üblichen ansätzen zT überlegen sind).

    e) und dann der entscheidende punkt, und auch der grund, weshalb ich für meine haskell-einführung dankbar bin, auch wenn ich nicht immer glücklich dabei war: funktionales programmieren gibt dir zwei sehr wesentliche theoretische grundlagen:
    - Rekursion - und zwar nicht so triviales zeug wie du im java-grundkurs hast, sondern die wirklich happigen konzepte und anwendungen.
    - Currying - ein Konzept welches mittels HighOrderMessaging auch in anderen und durchaus populären Sprachen immer wichtiger wird.

    Gerade bei der Rekursion kann man zurecht einwenden, dass sie schlussendlich scheisse sei - dass der code meist weniger effizient, die fehleranfälligkeit dafür höher ist. aber auch wenn man nie mit rekursion programmieren will erachte ich es als wichtig und sinnvoll, dass man das konzept kennt und begriffen und jederzeit zur verfügung hat.
    es gibt einen klassischen artikel von Joel On Software, wo er sich darüber beklagt, dass die Abgänger von reinen Java-Unis im Schnitt schlechtere Programmierer sind. nicht weil java eine schlechtere Sprache ist, sondern weil sie eine leichtere Sprache ist, weil man grundlegende konzepte nicht kapieren muss, und dementsprechend auch keine Selektion innerhalb der Programmierer stattfindet. Dabei konzentriert sich Joel auf zwei Konzepte: Pointer und Rekursion. Konzepte, die im Gegensatz zu simplen Schleifen oder Vererbungen schlicht und einfach nicht jedem Hirn zugänglich sind, und wo der Trennstrich zwischen besserem Webschreiberling und gutem Programmierer gezogen werden kann.

    ich empfehle dir deshalb auf alle fälle, dich mit haskell zu befassen. nicht weil du es später brauchen würdest, sondern weil dir die konzepte dahinter später zu gute kommen werden....

    und ja, ich weiss, dass ich den joelOnSoftware-Artikel etwas sagen wir mal willkürlich zitiere. sein fokus liegt auf der selektion, meiner im lernen
     
    Peter Maurer gefällt das.
  9. Tengu

    Tengu Apfel der Erkenntnis

    Dabei seit:
    05.02.07
    Beiträge:
    721
    Jo, Danke erst mal!

    Also... ich lerne, wenn ich Haskell lerne, elegenateres Programmieren. Find ich gut, denn Rekursion hab ich nur durch Langeangucken begriffen. Schaden tut es also sicher nicht, brauchbar ist es nur vielleicht, aber man könnte im Endeffekt was von haben.

    Danke für die Infos... ich denk ich setz mich da rein und passieren kann ja eh nix. Verschwendete Zeit wird es also nicht sein.

    Alles klar!
     
    #9 Tengu, 15.02.07
    Zuletzt bearbeitet: 15.02.07
  10. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    [schwelg]
    Ich hab' Rekursion übrigens als Schüler in einer Informatik-AG gelernt. Wir saßen an diversen Apple IIe und durften mit Apple Pascal ohne Variablenbenutzung einen Roboter durch ein Labyrinth bewegen. Und ich höre meinen Info-Lehrer noch zu uns Schülern predigen "Eine Treppe ist eine Stufe und eine Treppe...". :)
    [/schwelg]
     
  11. Tengu

    Tengu Apfel der Erkenntnis

    Dabei seit:
    05.02.07
    Beiträge:
    721
    Habt ihr noch nen paar Literaturempfehlungen, aber bitte nicht so Hardcore Zeug. ;)
     
  12. schlingel

    schlingel Melrose

    Dabei seit:
    06.06.04
    Beiträge:
    2.483
    Nö, ich hab zu Haskell nichts lesenswertes gefunden. Also Aufpassen und das Skript des Profs lesen
     
  13. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Einspruch, Euer Ehren. Ich behaupte das exakte Gegenteil. ;) Nicht jede Rekursion läßt sich durch SChleifen abbilden! Andersherum stimmt es: Jede Schleife läßt sich durch eine Rekursion abbilden.
     
  14. mullzk

    mullzk Linsenhofener Sämling

    Dabei seit:
    04.01.04
    Beiträge:
    2.529
    uiuiui, da hat wohl jemand bei der einführung in programmiertechniken zuviel rumgesurft statt dem dozent zugehört. oder im selbststudiums-fall gemeint, die grundlagen-seiten nicht anschauen zu müssen.
    fakt ist: schleifen sind mächtiger als rekursionen. ist einfach so, den beweis findest du per google in unzähligen variationen...


    von wegen haskell-literatur: neben dem skript des profs hat mir Yet another Haskell Tutorial (pdf) einige gute hinweise und tips gebracht. ausserdem habe ich viel code von standard-libraries angeschaut - aufgrund der eleganz von haskell ist dieser wesentlich aufschlussreicher als zB code der c-libraries.
    der offizielle Hugs User Guide hingegen hat mir nicht viel gebracht...
     
  15. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Einen Beweis? Den will ich sehen! Oder traust Du Dir tatsächlich zu, jede (eine) rekursive Funktion, die ich Dir nenne in Schleifen zu realisiern?

    BTW: Als ich mein Informatikstudium begonnen habe gab es noch keine Möglichkeit im Internet zu surfen.
     
  16. Geigaman

    Geigaman Macoun

    Dabei seit:
    17.03.06
    Beiträge:
    116
    Es geht nicht darum, dass er es kann, sondern, dass es prinzipiell möglich ist oder nicht. Sorry, aber so ist es nunmal in der theoretisch Informatik. Ich würde mich zu keiner Aussage hinreißen lassen, vermute aber dass WHILE Schleifen mächtiger sind als Rekursionen, welche nur LOOP berechenbar sind.
    Wir mussten Haskell im Grundstudium lernen. Für das Verständnis von funktionaler Programmierung bringt es wirklich viel. Allerdings hat die Sprache wohl außerhalb der Uni kaum Anwendung. Es gibt wohl eine Art Fallstudie, bei der ein Webserver ins Haskell implementiert wurde. Schon ziemlich krank, allerdings wohl auch richtig schnell und klein.
     
    #16 Geigaman, 16.02.07
    Zuletzt bearbeitet: 16.02.07
  17. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Beweise bitte. Es ist nämlich weder prinzipiell noch überhaupt möglich, jede rekursive Funktion durch Schleifen abzubilden. Das brauche ich auch nicht zu beweisen, es reicht, daß ich ein Gegenbeispiel nenne.

    Aber was halten die Rekursionsgegner davon, wir machen dafür einen neuen Thread auf?
     
  18. Walli

    Walli Blutapfel

    Dabei seit:
    06.01.06
    Beiträge:
    2.594
    Man kann doch z.B. einfach einen Stack nachbilden und den in einer Schleife abarbeiten. Ich sehe keine großen Probleme darin eine beliebige auf einem Rechner programmierbare Rekursion mit einer Schleife zu realisieren, habe aber auch nur eine überschaubare Ahnung von theoretischer Informatik.
     
  19. Walli

    Walli Blutapfel

    Dabei seit:
    06.01.06
    Beiträge:
    2.594
    Java hat sowas auch mit BigInteger und Co. und für C/C++ gibt es sowas auch, z.B. GMP. Deswegen allein würde ich nicht Haskell nehmen.

    Ich sehe Haskell als eine Sprache an um funktionale Programmierung zu erlernen, aber ich habe noch nie etwas weltbewegendes gesehen, was in Haskell programmiert wurde. Kennt jemand da zufällig etwas?
     
  20. mullzk

    mullzk Linsenhofener Sämling

    Dabei seit:
    04.01.04
    Beiträge:
    2.529
    Yup, das mit der Beweislast ist klar - such du mir eine Rekursion, von der du glaubst, dass man sie unmöglich mit einer Iteration machen kann, und ich such mir unterdessen das skript vor, in dem der mathematische Beweis ist, dass jede Rekursion per Iteration erledigt werden kann.
    Den Gegenbeweis zu deinem Beispiel kriegste vermutlich schon früher...
    sehr dafür, dass wir einen ernstgemeinten Haskell-Frage-Thread nicht weiter mit protzigem Ich-Habe-Recht-Macho-Gehabe belasten :D
     

Diese Seite empfehlen