Haskell AND Lisp vs. Haskell OR Lisp [geschlossen]

40

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?

Zeke
quelle
1
Und F # und Clojure.
CND

Antworten:

58

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.

Larry Coleman
quelle
6
Ich denke, Sie haben es verstanden - was Haskell und Smalltalk so nützlich zum Lernen macht, ist ihre Reinheit.
Frank Shearar
4
Ich stimme der Reinheit zu, die das Erlernen einer Sprache sehr erleichtert. Ich konnte die funktionale Sprache selbst mit LISP nicht verstehen, weil in der Sprache alles möglich ist und ich zu viel zwingenden OO-Hintergrund habe. In Haskell gibt es jedoch keine derartigen Konzepte, die das Lernen stören.
Eonil
1
Es ist lustig, ich habe das Gegenteil erlebt. Ich habe die wichtigsten Punkte der funktionalen Programmierung durch Scheme, meine Muttersprache, gelernt. Ich hacke gelegentlich in Haskell und muss zwangsläufig 90% der Dinge neu lernen, die ich kannte, wenn ich Haskell für eine Weile verlasse. Davon abgesehen ist Haskell eine unglaublich reiche Sprache, die Ihnen (sehr gewaltsam) eine Menge beibringen kann. Typen Typen Typen Typen! Folgen Sie den Typen!
Josh Infiesto
31

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:

  • Es ist ein Multiparadigma. Wie dsimcha zeigt, können Sie FP in andere Paradigmen integrieren.
  • 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.
Frank Shearar
quelle
11

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
14
[Schärft seine Klammern]
Inaimathi
6
Vielleicht kann jemand einen Texteditor dafür schreiben. Ich habe gehört, dass das Emacs-Betriebssystem kein Emacs-Betriebssystem enthält. Ich weiß, dass du den Viper-Modus bekommen kannst :)
greyfade 13.11.10
14
Tatsächlich gibt es einen Emacs-Klon namens Yi, der Haskell genauso verwendet wie Emacs Lisp. Im Vergleich zu (GNU) Emacs ist Yi sogar noch reiner, da sein Kernel ebenfalls in Haskell geschrieben ist, während Emacs-Kernel in der Regel nicht in Lisp geschrieben sind. GNU Emacs 'Kernel ist in C geschrieben, JEmacs' ist zum Beispiel in Java geschrieben.
Jörg W Mittag
2
@ Jörg, wenn es sich um eine teilweise Neuimplementierung anstatt eines vollständigen Klons von GNU Emacs oder XEmacs handelt, ist es nicht dasselbe. Ähnlich wie beim Vergleichen von Word mit Wordpad oder Notepad.
1
@ Thorbjørn Ravn Andersen: Ja, aber nicht ganz so schlimm. :)
greyfade
11

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!

dagnelies
quelle
+1: Guter Punkt. Ich kenne Haskell und Lisp. Auch wenn ich in keinem von beiden Experte bin, denke ich, dass Sie Recht haben, dass sie sehr unterschiedlich sind. In Haskell haben Sie nicht die Idee, Daten als Code zu verwenden. In Lisp gibt es keinen (AFAIK) -Mustervergleich. Wahrscheinlich ist die Liste (!) Der Unterschiede länger.
Giorgio
7

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.

dsimcha
quelle
5
Ich schätze, Sie wollen einen "Haskell vs Lisp" -Krieg!
Don Roby
3
Haskell ist eine akademische Sprache, die auf Reinheit Wert legt ... und von vielen Menschen in der realen Welt verwendet wird. Smalltalk ist auch in diesem Lager.
Frank Shearar
Viele Leute benutzen Haskell in der realen Welt?
Jon Harrop
1
@ Jon Harrop: Nun, ich benutze Haskell in der realen Welt (und es funktioniert wirklich gut für bestimmte Anwendungen), vielleicht bin ich einer der wenigen (?)
Giorgio
5

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.

timday
quelle
Interessant, dass Sie mit Scala weiter gekommen sind als mit OCaml. Woher?
Jon Harrop
@ Jon: Gute Frage; schwer zu sagen. Vielleicht war ich zu der Zeit einfach nicht bereit, mich auf die Funktionsweise einzulassen. Vielleicht habe ich zufällig ein Scala-Tutorial auf der richtigen Ebene gefunden. Vielleicht hat Scalas C / C ++ / Java-Abstammung es ein bisschen weniger fremd gemacht. Angesichts einer rationalen Wette, die heutzutage eher auf F # als auf Scala abzielt, werde ich die OCaml-Domäne wahrscheinlich irgendwann noch einmal besuchen, obwohl ich mich in diesem Bereich nur aus Freude damit beschäftige, eine andere "Programmier-Einstellung" als in C ++ zu entwickeln Tag, ich habe eine perverse Neigung, Haskell als nächstes erneut zu versuchen.
am
Reibungslose
2

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.

Nate Symer
quelle