Funktionale Programmierung mit Haskell



  • the evaluation of mathematical functions and avoids state and mutable data

    Ja, das geht auch mit Lisp/Scheme nativ. Auf der englischen wikipedia-Seite zu Lisp steht "multi-paradigm: functional, procedural, reflective".

    Auf der englischen wikipedia-Seite zu Functional Programming steht:

    notable functional programming languages used in industry and commercial applications include Erlang,[2] OCaml,[3] Haskell,[4] Scheme[5][6] and ...



  • so gehts nicht schrieb:

    en.wikipedia.org schrieb:

    In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

    Es ist unmöglich ein Hello World Programm zu schreiben wenn man sich an diese Definition halten muss.

    Verwirrend irgendwie.



  • Shade Of Mine schrieb:

    so gehts nicht schrieb:

    en.wikipedia.org schrieb:

    In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

    Es ist unmöglich ein Hello World Programm zu schreiben wenn man sich an diese Definition halten muss.

    Verwirrend irgendwie.

    aeeeehh .. nö wieso denn



  • Shade Of Mine schrieb:

    Es ist unmöglich ein Hello World Programm zu schreiben wenn man sich an diese Definition halten muss.

    deshalb enthält Haskell das Konzept der IO-Modaden, um zustandsabhängige Aktivitäten funktional zu erledigen.



  • Tippfehler, gemeint war Monaden



  • Und die Frage ist eigentlich auch nur, wie man "Hello-World-Programm" definiert. Man kann in einer rein funktionalen Sprache (ohne Monaden...) zwar kein Programm schreiben, dass "Hello World" irgendwohin ausgibt, aber durchaus eins, dass den String "Hello World" liefert. 🙄



  • Firewall schrieb:

    Und wie sieht die Zukunft der funktionalen Programmierung aus?

    das würde ich auch gerne wissen - momentan sieht es so aus, als würden bestimmte funktionale Konstrukte wie lambda, map, reduce usw.. ebenso wie klassenbasierte OO-Modelle in neuere Sprachen fast schon "standardmäßig" einfließen, aber 100% reine funktionale Programmierung scheint doch irgendwie inpraktikabel. Jedenfalls wollen, relativ gesehen, die wenigsten Leute FP außerhalb des akademischen Bereichs benutzen.

    Es ist wohl einfach zu umständlich, syntaktische "Handstände" oder kategorientheoretische "Tricks" anwenden zu müssen, nur um so Selbstverständliches wie "Zustand" und E/A zu programmieren, und die natürliche algorithmische Denkweise des Menschen ist imperativ - niemand schreibt seinen Einkaufszettel als funktionales Programm, sondern "1. .. 2. .. 3. .."

    my EUR 0.02



  • PRIEST schrieb:

    aeeeehh .. nö wieso denn

    Ausgabe hat mit Seiteneffekten zu tun.
    Ich will damit nur aufzeigen, "keine Seiteneffekte" ist eine gute Idee, aber kann nie und nimmer ein Dogma sein. Denn du brauchst Seiteneffekte. Ohne ihnen kannst du nicht mit deiner umwelt interagieren.



  • Man nehme etwas Lisp und etwas von C und raus kommen so Sachen wie Javascript, Ruby ... Lisp wird nicht umsonst als die Mutter "aller" Programmiersprachen bezeichnet. In "Struktur und Interpretation von Computerprogrammen (bzw. in den video lectures) ist eine Einfuehrung gegeben. Auch ist dargestellt, warum man Seiteneffekte braucht.



  • Shade Of Mine schrieb:

    Ich will damit nur aufzeigen, "keine Seiteneffekte" ist eine gute Idee, aber kann nie und nimmer ein Dogma sein.

    Erhebt das etwa irgendwer zum Dogma? </Rhetorische Frage>



  • knivil schrieb:

    ... Lisp wird nicht umsonst als die Mutter "aller" Programmiersprachen bezeichnet.

    echt? Fortran, Algol, Smalltalk und Simula waren aber auch nicht ganz unwichtig in der Ahnenreihe heutiger Prog.Sprachen.



  • u_ser-l schrieb:

    knivil schrieb:

    ... Lisp wird nicht umsonst als die Mutter "aller" Programmiersprachen bezeichnet.

    echt? Fortran, Algol, Smalltalk und Simula waren aber auch nicht ganz unwichtig in der Ahnenreihe heutiger Prog.Sprachen.

    *hihihi* Smalltalk wurde in Lisp als Prototyp entworfen :). Aber natürlich hat Lisp wenig mit den "statischen Sprachen" wie Fortran, Algol und Simula zu tun.



  • rüdiger schrieb:

    *hihihi* Smalltalk wurde in Lisp als Prototyp entworfen 🙂

    interessant 🙂 wußte ich nicht.

    Ich weiß aber, daß der Erfinder von Smalltalk sich u.a. zum Ziel gesetzt hatte, eine OO-Sprache so zu definieren, daß ein Interpreter, der in der Sprache selbst geschrieben sein sollte, nicht viel länger als der legendäre LISP-in-LISP-Interpreter sein sollte - 1 Seite Code.

    Siehe A.C. Kay: "The Early History of Smalltalk", ACM SIGPLAN Notices Vol. 28 No. 3 (1993)



  • komisch: egal, von welchem Punkt man in einer Diskussion über allgemeine Programmiersprachen ausgeht, am Ende kommt man immer zu LISP und Smalltalk.

    Chaostheoretiker nennen so etwas einen "strange attractor" - das Fixpunkt-Theorem in der Theorie der Programmiersprachen-Diskussion 😃



  • Das liegt daran, dass Lisp Die Mutter aller Programmiersprachen ist (na gut, ausser von Fortran). Seltsam ist das nicht, sondern ein Fakt.



  • knivil schrieb:

    Das liegt daran, dass Lisp Die Mutter aller Programmiersprachen ist (na gut, ausser von Fortran).

    will ich meinen, fortran ist älter. ausserdem gibt's, äääh gabs, noch das: http://de.wikipedia.org/wiki/Plankalkül
    🙂



  • Du bist ganz schoen pingelig. Die Griechen hatten sicherlich auch sowas wie eine Programmiersprache ("Wie-Rechne-Ich-Mit-Dem-Abakus"), aber leider konnte sie sich auf (modernen) Rechenmaschinen nicht durchsetzen. Auch ist Fortran garnicht so viel aelter und besass am Anfang nicht die Ausdruckskraft von Lisp.



  • knivil schrieb:

    Die Griechen hatten sicherlich auch sowas wie eine Programmiersprache ("Wie-Rechne-Ich-Mit-Dem-Abakus"), aber leider konnte sie sich auf (modernen) Rechenmaschinen nicht durchsetzen.

    naja, es gab auch noch mechanische rechenmaschinen, da war dann das 'programm' eine hardcodierte anordnung von walzen und zahnrädern. und analgrechner wollen wir auch nicht vergessen, die über ein steckbrett programmiert wurden.
    🙂



  • knivil schrieb:

    Das liegt daran, dass Lisp Die Mutter aller Programmiersprachen ist (na gut, ausser von Fortran). Seltsam ist das nicht, sondern ein Fakt.

    Daß LISP die "Mutter aller Programmiersprachen ist", ist doch nicht wörtlich zu nehmen, sondern in dem Sinne, daß man mit LISP viele andere Paradigmen nachbilden kann, weil LISP eine äußerst einfache und mächtige (also elegante) Notation ist.

    Jedes Paradigma (funktional, deklarativ, imperativ, strukturiert, objektorientiert, ...) hat seine eigenen Ahnen, und Fortran, Algol, Forth oder Smalltalk sind da nicht weniger wichtig als Lisp.

    Denk dir mal Algol weg - was würde dann heute alles fehlen? C, C++, Pascal et al., ...



  • Nein, das ist schon ernst gemeint. Selbst in der JavaVM stecken Ideen von Lisp. Leider ist das vom Marketing eher schlecht. Ausserdem habe ich in einem vorigen Post geschrieben, das man Teile von C und Teile von Lisp nimmt und dadurch neue Sprachen wie javascript, Ruby etc. bekommt. Selbst C++ bekommt sein lambda.

    viele andere Paradigmen nachbilden kann

    Nein gerade nicht. In Lisp wurden diese Paradigmen erfunden. Objektorientierung gibt es schon lange vor jeder anderen objektorientierten Sprache, multiple dispatch ist ein alter Hut ... Wie wurde es in dem Beitrag formuliert: Redet man mit Lisp-Programmierern, bekommt man nur als Antwort: "Kenn ich schon, hab ich schon, war ich schon".


Anmelden zum Antworten