Kommentare
- Und F # und Clojure.
Antwort
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ö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, Sie können 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? Ich habe die Erfahrung gemacht, dass ich funktionale Programmierung erst wirklich verstanden habe, als ich sie ausschließlich verwenden musste. Sobald die funktionale Programmierung komfortabel ist, können Sie den Rest der von Common Lisp zur Verfügung gestellten Tools hinzufügen und das für die jeweilige Aufgabe am besten geeignete Tool verwenden.
Kommentare
- Ich denke, Sie haben es geschafft – was Haskell und Smalltalk für das Lernen so nützlich macht, ist ihre Reinheit.
- I. Die Zustimmung zur Reinheit erleichtert das Erlernen einer Sprache erheblich. Ich konnte ' mit LISP die funktionale Sprache selbst nicht verstehen, da in der Sprache alles möglich ist und ich zu viel zwingenden OO-Hintergrund habe. Aber in Haskell gibt es keine solchen Konzepte, die das Lernen stören.
- Es ist ' lustig, ich ' habe hatte die gegenteilige Erfahrung. Ich habe die wichtigsten Punkte der funktionalen Programmierung in Scheme, meiner Muttersprache, aufgegriffen. Ich hacke gelegentlich in Haskell und finde unweigerlich, dass ich 90% der Dinge, die ich wusste, neu lernen muss, wenn ich Haskell für eine Weile verlasse. Davon abgesehen ist Haskell eine unglaublich reiche Sprache, mit einer riesigen Menge, die Sie (sehr gewaltsam) unterrichten können. Typen Typen Typen Typen! Folgen Sie den Typen!
Antwort
UND bitte.
Haskell lehrt Sie das Reinste von FP, soweit ich zumindest weiß, genau wie Smalltalk das reinste von OO lehrt. (Ich erwähne dies nicht, um darauf hinzuweisen, dass OO und FP nicht heiraten können, sondern weil beide Sprachen „Edelstein“ -Sprachen sind – a Kernidee auf die Spitze getrieben.)
Lisp ist wirklich eine Sprachfamilie, daher werde ich über Common Lisp sprechen, da dies das bestimmte Mitglied der Familie ist, das ich verwende.
Lisp wird Ihnen noch viel beizubringen haben:
- Es ist ein Multiparadigma, wie dsimcha darauf hinweist , dass es Ihnen zeigen wird So integrieren Sie FP in andere Paradigmen.
- Lisp zeigt Ihnen, dass „Code-is-data, data-is-code“ ist, beispielsweise durch seine Makros.
- CLOS ist a Sehr interessante Marke von OO mit funktionierender Mehrfachvererbung und generischen Funktionen.
Antwort
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 unterschiedlich. 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!
Kommentare
- +1: Guter Punkt. Ich kenne einige Haskell und einige Lisp. Auch wenn ich in keinem von beiden ein Experte bin, denke ich, dass Sie Recht haben, dass sie sehr unterschiedlich sind. In Haskell Sie Ich habe keine Idee, Daten als Code zu verwenden. In Lisp gibt es keinen (AFAIK) Musterabgleich. Wahrscheinlich ist die Liste (!) der Unterschiede länger.
Antwort
Wenn Sie später Lisp lernen, können Sie Emacs anpassen, den wohl fortschrittlichsten verfügbaren Texteditor. Dies ist in Haskell nicht möglich.
Kommentare
- [Schärft seine Klammern]
- Vielleicht kann jemand einen Texteditor dafür schreiben. Ich habe gehört, dass das Emacs-Betriebssystem ' nicht mit einem geliefert wird. (Ich Kind. Ich weiß, dass Sie den Viper-Modus erhalten können. 🙂
- 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 auch in Haskell geschrieben ist, während Emacs-Kernel im Allgemeinen nicht in Lisp geschrieben sind. GNU Emacs ' Kernel ist in C geschrieben, JEmacs ' ist beispielsweise in Java geschrieben.
- @J ö rg Wenn es sich um eine teilweise Neuimplementierung anstelle eines vollständigen Klons von GNU Emacs oder XEmacs handelt, ist dies nicht dasselbe. Ähnlich wie beim Vergleichen von Word mit Wordpad oder Notepad.
- @Thorbj ø rn Ravn Andersen: Ja, aber nicht ganz so schlecht. 🙂
Antwort
Der Hauptvorteil, den ich beim Lernen von Lisp sehe, besteht darin, zu lernen, wie man FP in eine reale integriert -weltorientierte Multiparadigmensprache, anstatt sie nur im Kontext einer akademischen Sprache zu lernen, die Reinheit betont.
Kommentare
- Ich denke, Sie möchten ein " Haskell gegen Lisp " Krieg!
- Haskell ist eine akademische Sprache, die betont Reinheit … und viele Menschen verwenden es in der realen Welt. Smalltalk ' ist auch in diesem Lager.
- Viele Leute benutzen Haskell in der realen Welt?
- @Jon Harrop: Nun, ich Verwenden Sie Haskell in der realen Welt (und es funktioniert wirklich gut für bestimmte Anwendungen), vielleicht bin ich einer der wenigen (?)
Antwort
Ich komme ebenfalls aus C / C ++ / Python und habe FP in den letzten Jahren einige Male ausprobiert. Anfangs sah ich Haskell an und konnte weder Kopf noch Schwanz daraus machen, dann versuchte ich es mit Ocaml, kam aber damit nicht viel weiter. Schließlich hörte ich gute Dinge über Scala, probierte es aus und fand es sehr gut für mich geeignet (ich hatte in der Vergangenheit auch ein bisschen Java gemacht), bis zu dem Punkt, dass ich mich nach einem Jahr so in Scala versucht hatte (und 161 versandte) 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.
Also fand ich die Verwendung einer Multi-Paradigmen-Sprache (dh Scala, aber Lisp würde wahrscheinlich auch in die Rechnung passen) ein guter Weg in FP. Aber wenn Sie gerne in Haskell eintauchen (ich war es nicht), machen Sie es.
Kommentare
- Interessant, dass Sie mit Scala weiter gekommen sind als OCaml. Wie kommt es?
- @Jon: Gute Frage; schwer zu sagen. Vielleicht war ich ' gerade nicht bereit, " zu diesem Zeitpunkt in die " -Funktion zu gelangen. Vielleicht habe ich gerade ein Scala-Tutorial gefunden, das auf der richtigen Ebene steht. Vielleicht hat die C / C ++ / Java-Linie von Scala ' es nur ein bisschen weniger fremd gemacht. Angesichts einer vernünftigen Wette, die heutzutage eher auf F # als auf Scala basiert, werde ich ' wahrscheinlich irgendwann die OCaml-Domain erneut besuchen, obwohl ich mich nur aus purer Freude mit diesem Zeug beschäftige Wenn ich in eine andere " Programmier-Denkweise " als in meinen C ++ – Tagesjob gerate, habe ich eine perverse Neigung, Haskell als nächstes erneut zu versuchen.
- Reibungsloser Ansatz 🙂
Antwort
Ich stammte ursprünglich aus einem C / C ++ / Ruby-Hintergrund und ich 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 habe einen Monat Pause von Haskell gemacht, weil ich nichts hatte, wofür ich es verwenden 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 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ühlte 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 wird nie beeinträchtigt der Weg.
TL; TR Haskell ist ein Hauch frischer Luft, und Lisp ist ein etwas funktionalerer Rubin.