• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

Haskell sinnvoll?

Tengu

Apfel der Erkenntnis
Registriert
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
 

schlingel

Melrose
Registriert
06.06.04
Beiträge
2.479
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.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Und Rekursionen können enorm hilfreich sein und sind oftmals effizienter als Schleifen.
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.
 

schlingel

Melrose
Registriert
06.06.04
Beiträge
2.479
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.
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.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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.
OK. So würde ich das auch unterschreiben. Es kommt halt immer auf den Einsatzzweck an.
 

mullzk

Linsenhofener Sämling
Registriert
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
 
  • Like
Reaktionen: Peter Maurer

Tengu

Apfel der Erkenntnis
Registriert
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!
 
Zuletzt bearbeitet:

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
[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]
 

Tengu

Apfel der Erkenntnis
Registriert
05.02.07
Beiträge
721
Habt ihr noch nen paar Literaturempfehlungen, aber bitte nicht so Hardcore Zeug. ;)
 

schlingel

Melrose
Registriert
06.06.04
Beiträge
2.479
Nö, ich hab zu Haskell nichts lesenswertes gefunden. Also Aufpassen und das Skript des Profs lesen
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Einspruch, Euer Ehren. Ich behaupte das exakte Gegenteil. ;)

Jede Rekursion lässt sich durch Schleifen abbilden,
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.
 

mullzk

Linsenhofener Sämling
Registriert
04.01.04
Beiträge
2.529
Nicht jede Rekursion läßt sich durch SChleifen abbilden! Andersherum stimmt es: Jede Schleife läßt sich durch eine Rekursion abbilden.
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...
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
fakt ist: schleifen sind mächtiger als rekursionen. ist einfach so, den beweis findest du per google in unzähligen variationen...
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.
 

Geigaman

Macoun
Registriert
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.
 
Zuletzt bearbeitet:

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
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?
 

Walli

Blutapfel
Registriert
06.01.06
Beiträge
2.605
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?
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.
 

Walli

Blutapfel
Registriert
06.01.06
Beiträge
2.605
Einen Vorteil den Haskell gegenüber anderen Programmiersprachen hat ist die Möglichkeit mit viel grösseren Zahlen zu hantieren.
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?
 

mullzk

Linsenhofener Sämling
Registriert
04.01.04
Beiträge
2.529
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.
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...
Aber was halten die Rekursionsgegner davon, wir machen dafür einen neuen Thread auf?
sehr dafür, dass wir einen ernstgemeinten Haskell-Frage-Thread nicht weiter mit protzigem Ich-Habe-Recht-Macho-Gehabe belasten :D