it-swarm.dev

Haskell UND LISP vs. Haskell OR Lisp

Ich codiere derzeit mit C, C++ und Python. Ich möchte eine funktionierende Programmiersprache lernen und neige mich gerade 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 den Umgang mit funktionaler Programmierung lerne, welche Vorteile habe ich dann, wenn ich später Lisp lerne?

41
Zeke

Ich schlage vor, beides 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öhnt hatte, bemerkte ich, dass sich bei den meisten meiner Tippfehler Logikfehler versteckten. Wenn Sie an diesem Punkt angelangt sind und der nächste Meilenstein darin besteht, in Typen zu denken und Ihre eigenen Typen zu definieren, um Ihre Lösung auszudrücken, sind Sie bereit für Common LISP.

Mit Common LISP können Sie Monaden, Currying und alles, was Ihnen gefällt, von Haskell hinzufügen, aber Sie erhalten auch Mehrfachvererbung, wie Frank Shearar erwähnt, und generische Funktionen mit Mehrfachversand sowie 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 wirklich verstanden habe, als ich sie ausschließlich verwenden musste. Sobald die funktionale Programmierung komfortabel ist, können Sie den Rest hinzufügen die Tools, die Common LISP zur Verfügung stellt, und verwenden Sie das Tool, das für die jeweilige Aufgabe am besten geeignet ist.

58
Larry Coleman

Und bitte.

Haskell lehrt Sie, soweit mir zumindest bekannt ist, das reinste FP, genau wie Smalltalk das reinste OO lehrt. (Ich erwähne dies nicht, um darauf hinzuweisen, dass OO und FP kann nicht heiraten), sondern weil beide Sprachen "Edelstein" -Sprachen sind - eine Kernidee, die man sich ansieht Extreme.)

LISP ist wirklich eine Sprachfamilie, daher werde ich über Common LISP sprechen, da dies das besondere Mitglied der Familie ist, das ich verwende.

LISP wird Ihnen noch viel beibringen:

  • Es ist ein Multiparadigma, also zeigt dsimcha weist darauf hin Ihnen, wie Sie FP mit anderen Paradigmen) integrieren können.
  • LISP wird Ihnen beibringen, dass "Code-ist-Daten, Daten-ist-Code", zum Beispiel durch seine Makros.
  • CLOS ist eine sehr interessante Marke von OO mit funktionierender Mehrfachvererbung und generischen Funktionen.
31
Frank Shearar

Haskell und LISP sind zwei völlig verschiedene Tiere.

Haskell ist eine Art "reine funktionale Programmierung in einem Elfenbeinturm"

LISP ist eine Art "Code-ist-Daten/Daten-ist-Code/machen Sie Ihre eigenen Sprachkonstrukte". Sie können Ihren Code auf jede erdenkliche Weise manipulieren.

Sie sind sehr verschieden. Beide teilen den Aspekt der "funktionalen Programmierung", aber das ist im Vergleich zu ihren Unterschieden wirklich ein winziger kleiner Punkt. Probieren Sie sie einfach aus und Sie werden sehen, wie unterschiedlich sie sind!

11
dagnelies

Wenn Sie später LISP lernen, können Sie Emacs anpassen, den wohl fortschrittlichsten verfügbaren Texteditor. Das kann man in Haskell nicht machen.

11
user1249

Der Hauptvorteil, den ich beim Erlernen von LISP sehe, besteht darin, zu lernen, wie man FP] in eine realitätsorientierte Multiparadigmensprache integriert, anstatt sie nur im Kontext einer akademischen Sprache zu lernen, die Reinheit betont.

7
dsimcha

Ich komme auch aus einem C/C++/Python-Hintergrund und habe in den letzten Jahren ein paar Mal FP) ausprobiert. Anfangs habe ich Haskell angeschaut und konnte weder Kopf noch Schwanz daraus machen Dann versuchte ich es mit Ocaml, kam aber nicht viel weiter. Schließlich hörte ich gute Dinge über Scala, probierte es aus und fand es sehr gut für mich (ich hatte auch ein bisschen Java) gemacht = in der Vergangenheit), bis zu dem Punkt, dass Haskell nach einem Jahr des Einspielens in Scala (und dem Versenden von 161 Project Euler-Problemen damit) viel sinnvoller zu sein scheint Ich habe 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 Multi-Paradigmen-Sprache (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), machen Sie es.

5
timday

Ich stammte ursprünglich aus einem C/C++/Ruby-Hintergrund und habe FP Konzepte in Ruby verwendet, wann immer ich konnte. Zustand nur irgendwie mein Gehirn verletzt. Einer meiner Freunde rief mich eines Tages an und bat mich, etwas in Haskell zu schreiben (mein erster - und hoffentlich nicht letzter - Haskell-Job!). Ich lernte schnell die Sprache und warf etwas zusammen, das funktionierte. Es war nicht schön oder so, aber es hat funktioniert.

Ich machte einen Monat Pause von Haskell, weil ich nichts hatte, wofür ich es benutzen konnte. Aber 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 behandelt Fehler auch sehr gut durch intelligentes Werteboxen. 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, sie fühlten sich auch so gefährlich locker an wie Ruby oder JavaScript. Es war eine schreckliche Erfahrung und bietet nichts Neues außer Ruby oder Python.

C++ kann Haskell außerhalb der Speicherverwaltung keine Kerze vorenthalten. Haskell ist genauso schnell (wenn nicht sogar schneller), deutlich 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.

2
Nate Symer