Ich versuche mir in regelmäßigen Abständen eine neue Programmiersprache beizubringen. Kürzlich habe ich gelesen, dass sich Lisp und seine Dialekte im Gegensatz zu Sprachen wie C / C ++ befinden, was mich neugierig genug machte, mehr darüber zu erfahren. Zwei Dinge sind mir jedoch unklar, und ich suche nach Anleitung dazu:
Wird LISP in der heutigen Welt noch praktiziert / verwendet, oder handelt es sich um eine Legacy-Sprache wie FORTRAN / COBOL? Ich meine, abgesehen von der Beibehaltung des vorhandenen Codes, wird dieser überhaupt für neue Projekte verwendet?
Was ist der am häufigsten verwendete Dialekt? Ich bin auf Scheme und Common Lisp als die 2 am weitesten verbreiteten Dialekte gestoßen und wollte, dass Sie wissen, welche davon am beliebtesten / nützlichsten ist - und wäre sehr erfreut, wenn Sie Ressourcen vorschlagen könnten, mit denen ein Anfänger beginnen kann.
Ich möchte zwar unbedingt eine Sprache lernen, die sich grundlegend von den von mir gewohnten Verfahrenssprachen unterscheidet, aber ich möchte keinen übermäßigen Aufwand in etwas investieren, das völlig veraltet ist - ich würde es trotzdem lernen, wenn es professionell "tot" wäre. aber nur mit einer akademischen Perspektive ...
Antworten:
Ich mag Scheme eher, wenn Sie mit der JVM arbeiten möchten, sollten Sie Clojure ausprobieren, ein Lisp, das für die Arbeit in der JVM entwickelt wurde. Und ja, Lisp ist es immer noch wert zu lernen, wie mächtig so ein minimales Design sein kann! Die Leute, die lisp kreiert haben, haben einiges richtig gemacht. Es ist erstaunlich, wie viele der coolen neuen Funktionen moderner Sprachen lisp in den 1960ern hatte!
Für ein eingebettetes Schema versuchen Sie guile: http://www.gnu.org/s/guile/
quelle
In Beantwortung von Frage 2, "Am weitesten verbreiteter Dialekt":
Hängt davon ab, wie Sie "Am häufigsten verwendet" interpretieren. Hier sind einige Servietten-Berechnungen für Untergrenzen, wie viel Gebrauch die einzelnen ausgewählten Dialekte haben.
Der meiste rohe Code geschrieben
Gewinner: Schema oder Common Lisp. Zu viele Unbekannte.
Der meiste 'Produktions'-Code
Gewinner: Ich vermute, Common Lisp . Ich denke, wir können Frage 1 mit "Ja" beantworten, basierend auf der Verwendung von Common Lisp und Clojure.
Die meisten Endbenutzer
Gewinner: Schema hat hier die beste Untergrenze, da es Verkaufszahlen auf Uncharted gibt, aber es ist durchaus umstritten.
Fazit
Abschließend finde ich, dass große Äpfel.
quelle
Ja, aber Sie müssen wissen, wo Sie suchen müssen. Leute, die LISP verwenden, neigen nicht dazu, zu laut darüber zu schreien, aber es gibt eine Handvoll Beispiele für einige bekannte Startups, die es in den letzten 20 Jahren mit großer Wirkung eingesetzt haben. Es ist auch bei kleinen Unternehmen in Europa sehr beliebt.
Dies ist eine gültige Frage, die jedoch nicht einfach zu beantworten ist. Die Beantwortung dieser Frage ist möglicherweise auch nicht besonders hilfreich: Viele Implementierungen haben einen bestimmten Schwerpunkt. Daher sollten Sie sie am besten auswählen, wenn sie zu Ihrem speziellen Problem passen, anstatt auf der Grundlage, wie häufig sie anderweitig verwendet werden. Stattdessen erzähle ich Ihnen ein wenig über Ihre Möglichkeiten und Sie können selbst entscheiden.
LISP ist eine Familie von Sprachen und jede dieser Sprachen hat eine Familie von Dialekten und Implementierungen. Im Großen und Ganzen fallen Dialekte in zwei Lager: "LISPs" und "Schemes".
LISPs: Bis vor relativ kurzer Zeit war Common LISP König. Es war ein Versuch, alle unterschiedlichen LISPs zu vereinheitlichen, und ohne unfreundlich zu sein, war es das "C ++" von LISP. Das heißt, es war eine RIESIGE Sprache. Es hatte alles. In den letzten Jahren ist Clojure erschienen. Clojure ist ein LISP, der auf der Java Virtual Machine ausgeführt wird und versucht, sich in einer funktionalen Programmierphilosophie zu verankern. Traditionell waren andere LISPs streng multiparadigmatisch. Clojure ist interessant, weil es sowohl das Beste als auch das Schlechteste von LISP und der JVM liefert. Es gibt immer noch einen Großteil der Ausführlichkeit von Java-basierten Sprachen, und die Syntax war ziemlich frei und einfach, sodass es viele Knöpfe und Schaltflächen für verschiedene Dinge gibt, aber einige davon sind wirklich vorhandeninteressante Ideen rund um Datentypen, insbesondere einige der praktischen Möglichkeiten, um Ideen aus der funktionalen Programmierung anzuwenden.
Schemata: Schemata sind eine strikte Untermenge von LISPs. Das Schema wurde von Steele und Sussman erfunden und war in jungen Jahren für den MIT Computing 101 Lecture Course bekannt. Das Schema ist im "Revised ^ n Report on the Algorithmic Language Scheme (RnRS)" definiert. Ja, sie haben einen Mathe-Witz drin. Schema ist eine standardisierte Sprache in einer Weise, die andere LISPs nicht sind. Dies trägt erheblich zur Portabilität zwischen Implementierungen bei, ist jedoch keine Wunderwaffe. Die Standardisierungsbemühungen waren eher konservativ, und Innovationen bei den Implementierungen, insbesondere in Bezug auf Module, waren eher unterschiedlich. Es gibt auch eine Reihe von SRFIs (Scheme Requests For Implementation), die dem RFC-Prozess der IETF ähneln. Die Leute verwenden es, um kleine Dinge nach Bedarf zu standardisieren.
Schemata unterscheiden sich von LISPs darin, dass sie eine Reihe von strengen Anforderungen erfüllen müssen. Eine davon ist die "Tail-Call-Optimierung", mit deren Hilfe die Rekursion effizienter wird. Daher sind rekursive Programmierstile in Scheme viel beliebter als in LISP. Schema ist, auch ohne unfreundlich zu sein, wie das "C" von LISP. Das heißt, es ist eine kleine Sprache und Sie sollten in der Lage sein, alles auf einmal im Kopf zu behalten.
Derzeit gibt es zwei Systemfamilien: die auf der 5. Version (R5RS) und die auf der 6. Version (R6RS) basierenden. Die Komplexität von R6RS war weitaus größer als die seiner Vorgänger, und so haben sich viele R5RS-Implementierungen dafür entschieden, es zu überspringen, in der Hoffnung, dass R7RS R5RS ähnlicher sein wird als R6RS. Der R7RS-Standardisierungsprozess ist derzeit im Gange und hat versucht, sowohl die Wünsche der R5RS-Implementierer als auch die der R6RS-Leute zu berücksichtigen, indem eine kleine Basissprache in ihrer ersten Arbeitsgruppe standardisiert und dann eine zweite Arbeitsgruppe beauftragt wurde, die größeren Funktionen zu standardisieren. Auf diese Weise kann die Sprache sowohl auf winziger eingebetteter Hardware als auch auf leistungsfähigeren Computern effizient und nützlich implementiert werden.
Jetzt werde ich genauer sein:
PicoLisp ist eine wirklich coole LISP. Es ist winzig! Der Autor hat es für sich selbst geschrieben und, so wie ich es verstehe, lebt er seit den 1980er Jahren davon. Wenn Sie jemals die Gelegenheit haben, an einem Vortrag von ihm teilzunehmen, sollten Sie es tun: Er ist wirklich interessant und kennt sich mit seinen Dingen aus, und Sie werden nicht einmal den geringsten Hauch von Mainstream oder Langeweile bekommen.
Ich bin nicht mit Common-Lisp-Implementierungen vertraut, daher werde ich sie nicht weiter kommentieren.
Guile ist das offizielle GNU-Schema.
Racket ist ein R6RS-Schema, aber in letzter Zeit scheint es das Netz erweitert zu haben und versucht, "als Plattform für die Erstellung, das Design und die Implementierung von Sprachen zu dienen".
Huhn soll ein praktisches Schema sein. Es basiert auf R5RS und wird bis C kompiliert. Dies stellt einen wirklich, wirklich wichtigen Vorteil dar, da es absolut trivial ist, vorhandene C-Bibliotheken zu verwenden. Daher ist Chicken wahrscheinlich das nützlichste Schema, um Perl, Python, Ruby usw. als alltägliche Skriptsprache zu ersetzen. Es gibt mehrere Leute, die es seit mehreren Jahren exklusiv für alle ihre Bedürfnisse verwenden. Es hat eine interaktive REPL sowie einen Compiler. Die Community (sowohl auf der Mailingliste als auch im IRC) ist kompetent, freundlich und hilfsbereit.
Suchen Sie nach einer Implementierung mit vielen Modulen: Dies zeigt, dass sie allgemein einsetzbar ist und dass wahrscheinlich etwas dabei hilft, die Aufgabe zu lösen.
Suchen Sie nach einer Implementierung mit einem Compiler oder zumindest etwas, das nicht ausschließlich auf IDE oder REPL basiert. Viele der Implementierungen, die für den Unterricht entwickelt wurden, sind für allgemeine Skripterstellung sehr schwierig zu verwenden.
Ich würde Chicken empfehlen, da ich es verwende. Ich habe es in meinen persönlichen Projekten verwendet und ich habe es professionell verwendet (und benutze es derzeit).
Schema ist nicht beruflich tot, aber Sie müssen möglicherweise einige Anstrengungen unternehmen, um es in diesem Kontext zu verwenden. So etwas wie Hühnchen ist weit mehr als ein akademisches Unterfangen. Es kann fast alle Grundlagen von Hochsprachen abdecken, die Sie derzeit verwenden.
quelle
Ich kann nicht wirklich für alle Lisps sprechen, aber Clojure ist definitiv eine heiße und relevante Sprache. Eine London Clojure User Group, zu der ich Anfang dieser Woche gegangen bin, hatte über 100 Teilnehmer.
Ich fand es eine sehr aufschlussreiche Erfahrung, Lisp in Form von Clojure im letzten Jahr zu lernen (nach viel Erfahrung mit Java und C #). Hauptgründe dafür sind:
Es scheint aus folgenden Gründen auch eine praktische Wahl für den realen Einsatz in der Produktion zu sein:
Ich persönlich kenne Leute, die Clojure in einigen Investmentbanken und Startups einsetzen. Ich habe Clojure auch als primäre Entwicklungssprache für mein eigenes Startup ausgewählt, daher bin ich bereit, mein Geld dort unterzubringen, wo mein Mund ist :-)
quelle
Ich lerne gerade auch Lisp (und ich liebe es). Ich benutze Common Lisp, aber ich habe auch mit SBCL , Arc (beachten Sie, das ist Paul Grahams Version von Lisp, der, wie von Vitor Braga erwähnt, Yahoo Store / Viaweb erstellt hat) und Allegro CL rumgespielt , das Visual Studio für Lisp (can GUIs erstellen (habe ich aber noch nie benutzt).
In Bezug auf Verwendungen wurde Lisp häufig in der künstlichen Intelligenz eingesetzt, aber ich bin mir ehrlich, ich bin mir nicht sicher, wie viele andere "allgemeine" Verwendungen für Lisp es gibt. Viele der Websites, die ursprünglich in Lisp erstellt wurden, wurden in anderen Sprachen neu geschrieben. Es ist daher schwer zu sagen, dass sie für die Webentwicklung verwendet werden (nicht, dass dies nicht der Fall ist, aber die größeren Websites, die sie verwenden, tun dies nicht mehr ). Nach einer schnellen Suche (sehr schnell) finden Sie hier eine Liste von Software, die in Common Lisp von Wikipedia geschrieben wurde .
[EDIT] Was die professionelle Nutzung von Lisp angeht, gibt es Jobs, bei denen Sie Lisp einsetzen müssten. Sie sind nicht so zahlreich wie Java- oder C # -Jobs, aber sie existieren. Ich denke, Lisp ist eine dieser Sprachen, die für interne Anwendungen verwendet wird und möglicherweise einen Wettbewerbsvorteil bietet, auf den Unternehmen nicht verzichten möchten, indem sie Werbung für Lisp schalten. Ich erinnere mich, dass ich einen Post auf P.SE gesehen habe, in dem Smalltalk im Finanzbereich ähnlich war.
Die Fähigkeit zu zeigen, dass Sie in der Lage sind, verschiedene Paradigmen zu lernen, kann auch dann mehr Türen öffnen, wenn Sie Lisp nicht im Job einsetzen.
[/BEARBEITEN]
quelle
Wenn Sie heute Lisp lernen möchten, sollten Sie sich entweder den Schläger ansehen, bei dem es sich um eine schnelle Schemaimplementierung handelt (nun ja, er weicht ein wenig vom Schema ab, ist also jetzt ein eigener Dialekt), oder die Clojure, die von der Software profitiert JVM, auf der es ausgeführt wird (so stehen Millionen von Bibliotheken zur Verfügung und Sie können es mit Ihrem eigenen Java-Code interagieren lassen).
Auch wenn Sie es nicht lernen, um es tatsächlich zu benutzen, ist es immer von Vorteil, es zu lernen: Sie lernen neue Wege, um Probleme zu denken und damit umzugehen, auch in anderen Sprachen, wenn Sie sich eine Weile um Lisp gekümmert haben.
quelle
Ein wesentlicher Teil des Amazon-Backends befand sich früher in Lisp, wurde aber jetzt in C ++ umgeschrieben, wie ich gehört habe (ich muss zugeben, dass ich keine zuverlässige Quelle dafür habe).
Yahoo! Stores ist eines der klassischen Beispiele für Lisp-Web-Apps. Von der Yahoo! Speichert Ruhm, den Sie vielleicht von Paul Graham gehört haben . Graham ist einer der bekanntesten Verfechter von Lisp und schreibt ausführlich über dieses Thema. Vielleicht möchten Sie seine Website lesen, um seine Punkte zu kennen.
Früher hatte AutoCAD einen Lisp-Dialekt für sein Makrosystem. Ich weiß nicht, ob es immer noch so ist.
Schema ist eine saubere Sprache und sehr elegant. Es ist wahrscheinlich meine Lieblingsprogrammiersprache, daher bin ich möglicherweise voreingenommen. Wenn ich jetzt eine Hauptanwendung schreiben würde, würde ich wahrscheinlich eine Hauptanwendung in C schreiben, Geschäftsregeln in Scheme erweitern und definieren. Dies ermöglicht mir, Scheme und C zu nutzen - für die Geschwindigkeit und die Verfügbarkeit von Bibliotheken für fast alles.
quelle
Ich kenne einige Leute, die in einigen Startups im Silicon Valley Lisps spielen, und ich weiß, dass Amazon.com Lisp von Anfang an verwendet (obwohl ich gehört habe, dass sie es aus irgendeinem Grund durch C ++ ersetzen?)
Aber eine Firma, die man im Auge behalten sollte, ist Naughty Dog . Alle ihre Spiele sind mit einem Lisp-Dialekt geschrieben. Ursprünglich haben sie ihre eigenen gerollt, aber sie verwenden MZScheme in der Uncharted-Serie.
Ich würde wetten, dass Common Lisp, Clojure, Scheme und Emacs Lisp die vier am häufigsten verwendeten Dialekte sind, und von diesen würde ich vermuten, dass Scheme die am häufigsten verwendete ist. Natürlich habe ich nichts, womit ich das belegen könnte. :)
Ich mag SICP und den kleinen Schemer eher, wie von anderen vorgeschlagen, aber ich würde auch Land of Lisp vorschlagen , was eine ziemlich unterhaltsame Lektüre ist. :)
quelle
Ich denke, es hängt zum Teil davon ab, was Sie damit anfangen wollen - wenn Sie Ihre Einsichten in die verschiedenen Konzepte des Programmierens vertiefen und sich zu einem besseren Programmierer machen wollen, dann würde ich sagen, dass es sich lohnt, zumindest ein bisschen Lisp zu lernen. Wenn Sie nach einer weiteren Sprache suchen, die Sie Ihrem Lebenslauf hinzufügen können, um einen Job in dieser Sprache zu finden, möchten Sie wahrscheinlich woanders suchen. Es gibt nicht so viele Lisp-Jobs.
Ich persönlich versuche, entweder SBCL oder in jüngerer Zeit Clojure zu verwenden (und einige Emacs Lisp, aber das liegt daran, dass ich ein langjähriger Emacs-Benutzer bin - ich würde versuchen, Emacs Lisp zu lernen, wenn ich Lisp zu lernen versuche). Jetzt muss ich nur noch die Zeit finden, um tatsächlich mit diesen Sprachen zu spielen ...
quelle
Ich weiß nicht, dass es in LISP eine Menge Jobs gibt, ich kann sie auf keinen Fall sehen. Aber ich erinnere mich an eine lange Zeit, in der ich über eine NASA-Sonde gelesen habe, auf der LISP ausgeführt wurde und die neuen Code von der Erde einfügen konnte.
Auch in New York ist die Clojure Meetup Gruppe riesig. Ich vermute, wenn Sie interessiert sind und zu Ihrer Clojure-Meetup-Gruppe gehen, finden Sie möglicherweise Möglichkeiten, sich zu vernetzen und Jobs zu finden (keine Clojure-Jobs, sondern Dinge wie Java / C ++ / etc.) Es scheint im Raum New York absolut gewaltig zu sein, andere Gebiete können davon abweichen.
Auch LISP ist eine andere Denkweise. Zusätzlich führen LISP und SQL dazu, dass jede Menge verschachtelter Ausdrücke verwendet werden. Ich habe tonnenweise SQL verwendet und festgestellt, dass LISP sinnvoller ist. Wenn Sie jedoch Probleme mit SQL haben, sich an geschachtelte Klammern und Ausdrücke zu gewöhnen, während Sie LISP verwenden, werden SQL-Ausdrücke wahrscheinlich viel einfacher herauszufinden sein.
Ein klassisches Beispiel ist die Implementierung von MAX (a, b, c). Sie könnten eine verschachtelte Funktion mit einer Reihe von if-Anweisungen erstellen. Oder du könntest einfach sagen
MAX (MAX (a, b), c)
und benutze zwei einfache verschachtelte Aufrufe der beiden Items MAX, die für mich leichter zu lesen sind. Wenn Leistung ein Problem ist, möchten Sie es möglicherweise auch auf die andere Weise ausführen. Ich habe mich jedoch nicht darum gekümmert, die Anzahl der Vergleiche zu ermitteln, wenn Sie die einzelnen Methoden verwenden Ausdrücke mehrere Male erhalten Sie möglicherweise nicht das erwartete Ergebnis, da der Ausdruck möglicherweise mehrere Male ausgewertet wird. Achten Sie also auf Nebenwirkungen ...
quelle
MAX(MAX(a b) c)
Zwei zusätzliche Punkte:
Erstens ist Lisp eine großartige Sprache zum Schreiben von Code, in der Interaktionen zwischen Funktionen oder Daten häufig komplex sind. In vielen gängigen Sprachen müssen Sie, wenn Sie sich nicht sicher sind, warum Ihr Programm das tut, was es tut, spezielle Funktionen schreiben, mit denen Sie den internen Status des Programms überprüfen können. In einigen Sprachen müssen Sie dann warten, bis der Code neu kompiliert wurde. Natürlich kann es Tools wie Debugger geben, die dabei helfen. In Lisp brauchen Sie jedoch nur eine Möglichkeit, das Programm zu stoppen, und dann haben Sie in der Regel Zugriff auf alles in Lisp. In Common Lisp tippe ich manchmal einfach ^ C oder rufe an
error
in eine einzelne Funktion (was das einzige ist, was neu kompiliert werden muss und Sie müssen nichts tun, um es neu zu kompilieren). Sobald ich das Programm stoppe, werde ich sofort in einen Debugger geworfen - aber der Debugger gibt mir alle Möglichkeiten von Lisp und ich kann den Debugger verlassen, bestimmte Funktionen aufrufen usw. Ich kann jede der Datenstrukturen leicht untersuchen in meinem Programm. Die meisten Regelungen sollten ähnliche Praktiken zulassen. Lisp ist in dieser Hinsicht nicht einzigartig, aber was es bietet, geht über das hinaus, was viele populäre Sprachen bieten.Zweitens: Wenn Sie mit einem Lisp-Dialekt experimentieren möchten, würde ich dies nicht tun, ohne (a) einen Editor zu verwenden, der mit Klammern übereinstimmt, und (b) die richtige Lisp-Einrückung zu erlernen. Es wäre eine gute Idee, einen Editor zu verwenden, der auch für Sie die richtige Einrückung annähert. Die Formatierung von C / C ++ / Java-Code wurde für Sprachen mit weniger Klammern / Klammern / Klammern als Lisp entwickelt. Der hübsche Lisp-Druckstil funktioniert gut, wenn Sie mit ihm vertraut sind, und Sie werden nicht durch Klammern verwirrt oder verschwenden die Hälfte Ihres Platzes, indem Sie eine schließende Klammer pro Zeile setzen.
quelle
Im Moment habe ich den Eindruck, dass Lisp hauptsächlich in Beratungsgeschäften verwendet wird (nicht, dass Beratungsgeschäfte es meistens verwenden).
Es ist ein bisschen übertrieben für praktische Software. Hauptsächlich, weil die Leute nicht daran gewöhnt sind, glaube ich.
Traditionell ist Scheme ein ziemlich akademischer Dialekt von Lisp, und Common Lisp war der Branchendialekt.
Lisp ist besonders nützlich für symbolische Manipulationen und reflexionsähnliche Fähigkeiten.
Der Code, den ich zum Erlernen von Lisp geschrieben habe, war beispielsweise ein Programm, das zufällige Lambda-Funktionen konstruierte, sie auswertete und dann ausführte, um den Unterschied der Funktion zu einer Zielfunktion zu minimieren. Das alles war direkte Manipulation. In einer Sprache wie C ++ oder Java hätte ich eine Darstellung für die Funktionen erfinden müssen, die der Computer manipulieren würde.
quelle
Ich möchte eine Perspektive über Common Lisp und Scheme hinzufügen. Ich habe Clojure aufgrund der JVM vermieden, daher habe ich nicht viel Perspektive darauf.
Schema ist eine schöne prägnante, gut definierte Sprache. Es wurden viele Entscheidungen getroffen, die CL aufgrund des Erbes treffen musste, und es wurde ein reinerer Ansatz gewählt. Beispielsweise befinden sich Variablen und Funktionen im selben Namespace. Die Standardsprache ist kleiner und prägnanter, was sich gut eignet, um Ihnen die Dinge beizubringen, in denen lisp gut ist. Beispielsweise wird die Verwendung von Rekursion anstelle von Iteration unter Druck gesetzt, da standardmäßig keine iterativen Schleifen vorhanden sind und eine Optimierung des Tail Calls erforderlich ist . Das Schema hat ein sehr interessantes hygienisches Makrosystem, dessen Lernen von großem Wert ist. Aber IMO würde ich empfehlen, zuerst unhygienische Makros im CL-Stil zu lernen, von denen die meisten (?) Schemadialekte mindestens eine Implementierung bieten, auch wenn sie nicht Teil der Spezifikation sind. Da es sehr wahrscheinlich ist, dass Sie eine Sprache lernen wollen, um zu lernen, warum ich
Abgesehen davon ist die Community von Scheme fragmentiert und scheint, abgesehen von ein paar kleinen Taschen, hauptsächlich der Erforschung der Erledigung echter Aufgaben gewidmet zu sein ... Zum Beispiel hat jeder Dialekt seinen eigenen Paketmanager, und Pakete sind meist nicht portierbar über Dialekte hinweg, was ein großes Problem in der Systemgemeinschaft ist.
Common Lisp hingegen scheint der pragmatischere Ansatz für die Entwicklung einer Sprache zu sein. Der Standard ist so, dass viel Lisp-Code zwischen Implementierungen portierbar ist, viele Compiler sind schnell und gut optimiert. Es gibt eine große Anzahl von Paketen, von denen viele zwischen Implementierungen portierbar sind. Und anscheinend wird eine (vergleichsweise) große Menge echter Produkte in der Sprache erstellt. Und mit say quicklisp kommt das Paketmanagement dem einer modernen Community wie say Ruby oder Node einigermaßen nahe. CL ist jedoch nicht ohne Mängel, es hat zu diesem Zeitpunkt eine sehr große Spezifikation im Vergleich zum Schema, und sogar das Objektsystem CLOS, das traditionell als Bibliothek in Lisps geschrieben wird, ist Teil der Spezifikation IIRC. Und Sie können fühlen, wie das Erbe in einem großen Teil des Systems verankert ist.
Andernfalls könnte ich nicht über Clojure sprechen, und Emacs Lisp ist eindeutig die richtige Wahl, wenn Sie Emacs-Erweiterungen schreiben möchten, und ganz offensichtlich nicht die richtige Wahl für andere Software.
TLDR; Wenn Sie lernen möchten, empfehle ich Schema. Wenn Sie jedoch Software erstellen möchten, empfehle ich Common Lisp der beiden wichtigsten Lisp-Varianten.
quelle
Ich habe viel aus den Antworten gelernt. Vielen Dank an alle, die zu diesem aufschlussreichen Gespräch beigetragen haben.
Ich sollte newLISP erwähnen . Obwohl es sich sowohl von CL als auch von Scheme ein wenig unterscheidet, implementiert es viele sehr nützliche Funktionen. Ich finde den http-Server, die Multi-Processing-Funktionalität (Cilk) und die Remote-Evaluierungsfunktionen sehr sauber und benutzerfreundlich.
Die einzelne ausführbare Datei ist klein, schnell und enthält viele coole Batterien.
quelle
Ein weiterer Faktor, der bei der Auswahl des zu lernenden Lisp-Dialekts berücksichtigt werden muss, kann die Anzahl und Qualität der Implementierungen sein. Wenn ein Dialekt nur eine oder zwei Implementierungen enthält, bleiben Sie bei ihren Fehlern, bis diese behoben sind, und es besteht immer die Möglichkeit, dass die Leute aufhören, die Implementierung zu verfeinern. An sich ist das kein Grund, keinen Single-Implementation-Dialekt von Lisp zu verwenden, aber es ist etwas zu berücksichtigen. Ein Vorteil von Scheme und Common Lisp ist, dass es viele Implementierungen dieser Dialekte gibt. Da in beiden Sprachen Standards veröffentlicht wurden, wird bei relativ neuen Implementierungen wahrscheinlich zumeist derselbe Code ausgeführt. Einige dieser Implementierungen gibt es schon seit langer Zeit, sie befinden sich jedoch noch in der aktiven Entwicklung: Sie sind jetzt qualitativ hochwertige Implementierungen und werden noch weiterentwickelt.
quelle