Ich programmiere derzeit mit C, C ++ und Python. Ich möchte eine funktionierende Programmiersprache lernen, und jetzt neige ich zu Haskell. Ich möchte hier KEINEN "Haskell vs Lisp" Krieg beginnen; Was ich wissen möchte, ist Folgendes: Wenn ich Haskell hauptsächlich für das Erlernen der funktionalen Programmierung lerne, welche Vorteile habe ich dann, wenn überhaupt, wenn ich später Lisp lerne?
40
Antworten:
Ich schlage vor, beide zu lernen, zuerst Haskell, dann Common Lisp. Meine Erfahrung mit Haskell war, dass die statische Eingabe zunächst ein einschränkendes Ärgernis zu sein schien, aber als ich mich daran gewöhnte, bemerkte ich, dass die meisten meiner Tippfehler logische Fehler hinter sich hatten. Wenn Sie an diesem Punkt angelangt sind und den nächsten Meilenstein erreicht haben, in dem Sie lernen, in Typen zu denken und Ihre eigenen Typen zu definieren, um Ihre Lösung auszudrücken, sind Sie für Common Lisp bereit.
Mit Common Lisp können Sie Monaden, Currys und alles, was Sie von Haskell möchten, hinzufügen, aber Sie erhalten auch Mehrfachvererbung, wie von Frank Shearar erwähnt, sowie generische Funktionen mit Mehrfachversand und ein erweitertes Ausnahmebehandlungssystem.
Warum also nicht zuerst Common Lisp lernen? Ausgehend von einem prozeduralen und OOP-Hintergrund habe ich die Erfahrung gemacht, dass ich die funktionale Programmierung erst richtig verstanden habe, als ich sie ausschließlich verwenden musste. Sobald die Funktionsprogrammierung komfortabel ist, können Sie den Rest der von Common Lisp zur Verfügung gestellten Tools hinzufügen und jedes Tool verwenden, das für die jeweilige Aufgabe am besten geeignet ist.
quelle
Und bitte.
Haskell lehrt Sie, soweit mir bekannt ist, das Reinste von FP, genau wie Smalltalk das Reinste von OO lehrt. (Ich erwähne dies, um nicht zu suggerieren, dass OO und FP nicht heiraten können, sondern weil beide Sprachen "Juwelensprachen" sind - eine Kernidee, die auf die Spitze getrieben wird.)
Lisp ist wirklich eine Familie von Sprachen, also werde ich über Common Lisp sprechen, weil das das bestimmte Mitglied der Familie ist, das ich benutze.
Lisp wird Ihnen noch viel beibringen können:
quelle
Wenn Sie später Lisp lernen, können Sie Emacs anpassen, der wohl der fortschrittlichste Texteditor auf dem Markt ist. Das kann man in Haskell nicht machen.
quelle
Haskell und Lisp sind zwei völlig verschiedene Tiere.
Haskell ist irgendwie "reine Funktionsprogrammierung in einem Elfenbeinturm"
Lisp ist eine Art "Code ist Daten / Daten ist Code / Erstelle deine eigenen Sprachkonstrukte". Sie können Ihren Code so manipulieren, wie Sie es sich vorstellen können.
Sie sind sehr verschieden. Beide haben den Aspekt der "funktionalen Programmierung" gemeinsam, aber das ist im Vergleich zu ihren Unterschieden wirklich ein winziger Punkt. Probieren Sie sie einfach aus und Sie werden sehen, wie unterschiedlich sie sind!
quelle
Der Hauptvorteil, den ich beim Erlernen von Lisp sehe, ist das Erlernen der Integration von FP in eine realitätsnahe Multiparadigmasprache, anstatt sie nur im Kontext einer akademischen Sprache zu lernen, die den Schwerpunkt auf Reinheit legt.
quelle
Ich komme auch aus C / C ++ / Python und habe FP in den letzten Jahren ein paar Mal ausprobiert. Anfangs schaute ich Haskell an und konnte weder Kopf noch Schwanz fassen, dann versuchte ich es mit Ocaml, kam aber nicht viel weiter. Schließlich hörte ich etwas Gutes über Scala, probierte es aus und fand es sehr gut für mich (ich hatte in der Vergangenheit auch ein bisschen Java gemacht), bis zu dem Punkt, an dem ich mich nach einem Jahr in Scala versucht hatte (und 161 losgeschickt hatte) Projekt Euler Probleme damit), scheint Haskell viel sinnvoller zu sein. Tatsächlich habe ich gerade ein paar Bücher über Haskell bestellt und möchte es noch einmal versuchen, obwohl dies größtenteils durch die Existenz von Scalaz motiviert ist.
Daher fand ich die Verwendung einer Multiparadigmasprache (dh Scala, aber Lisp würde wahrscheinlich auch in die Rechnung passen) einen guten Weg in FP. Aber wenn Sie glücklich sind, in Haskell einzutauchen (ich war es nicht), dann probieren Sie es aus.
quelle
Ich stammte ursprünglich aus C / C ++ / Ruby und verwendete FP-Konzepte in Ruby, wann immer ich konnte. Staat verletzte nur irgendwie mein Gehirn. Einer meiner Freunde rief mich eines Tages an und bat mich, etwas in Haskell zu schreiben (mein erster - und hoffentlich nicht letzter - Job in Haskell!). Ich lernte schnell die Sprache und habe etwas zusammengeschmissen, das funktionierte. Es war nicht schön oder so, aber es hat funktioniert.
Ich habe einen Monat Pause von Haskell gemacht, weil ich nichts hatte, wofür ich es benutzen konnte. Als ich mich entschied, meine eigene Blog-Software zu schreiben, verwendete ich Haskell ( https://symer.io ). Haskell ist wirklich cool, weil Sie ein Problem in Teile aufteilen und diese Teile je nach Eingabe unterschiedlich implementieren können. Haskell handhabt auch Fehler sehr gut durch intelligentes Boxen von Werten. Es gibt so viele Werkzeuge, um mit diesen Boxen zu arbeiten, dass Sie einfach vergessen, dass sie existieren.
Meine Erfahrung mit Lisp (Schema) war völlig negativ. Der Sprache fehlten nicht nur diese intelligenten, einfachen Werkzeuge, sondern sie fühlte sich auch so gefährlich locker an wie Ruby oder JavaScript. Es war eine schreckliche Erfahrung und bietet nichts Neues als Ruby oder Python.
Außerhalb der Speicherverwaltung kann C ++ Haskell nichts vorenthalten. Haskell ist genauso schnell (wenn nicht sogar schneller), wesentlich knapper und viel sicherer. Aber Haskells Sicherheit steht niemals im Weg.
TL; TR Haskell ist ein Hauch frischer Luft und Lisp ist ein etwas funktionalerer Rubin.
quelle