Contra Chuck, ein Vorteil von Common Lisp ist, dass es einen Standard hat, an dem Implementierungen festhalten und den sie anstreben, sodass Sie weitgehend mit SBCL (mit hervorragender Typprüfung und Inferenz) entwickeln und dann beispielsweise als ausführbare Datei bereitstellen können, die mit verknüpft ist C-Bibliotheken (mit ECL oder anderen) oder als .jar unter Verwendung von Java-Bibliotheken (mit ABCL) oder mit einem Mac oder einer Windows-nativen GUI (Clozure, beide). Common Lisp ist erstaunlich portabel über Architekturen und Implementierungen hinweg und im Laufe der Zeit portierbar, und Common Lispers bemüht sich, die Dinge mit Unterstützung der Sprache so zu halten. Zur Veranschaulichung ist eine dumme Abweichung von nicht standardisiertem Verhalten die Frage "Ist dies eine spezielle Variable?" Also habe ich es in allen von mir verwendeten Implementierungen beantwortet:
#-abcl
(defun special-variable-p (symbol)
#+ecl(si:specialp symbol)
#+ccl(proclaimed-special-p symbol)
#+sbcl(equal '(:special t)
(multiple-value-list-int:info :variable :kind symbol)))
Dies reduziert sich zum Zeitpunkt des Lesens auf nichts in ABCL (das hat es bereits), (defun special-variable-p (symbol) (si:specialp symbol))
auf ECL und so weiter. Also kann ich dies in meine .rc-Dateien einfügen und die allgemeine Funktion bei der REPL verwenden. Dies ist jedoch nicht sehr wichtig: Dies ist kein Threading oder ein Netzwerk mit unterschiedlicher Unterstützung oder eine Bibliothek für kommunizierende sequentielle Prozesse . Dieses letzte Beispiel hat nur eine #+sbcl/#-sbcl
, da es auf fünf Implementierungen ausgeführt wird. Weil es auf Code basiert, der sorgfältig portiert wurde.
Was diese (und andere) Vorteile zulässt, stellt den Lernenden jedoch auch vor eine eigene Herausforderung: Common Lisp ist eine sehr große Sprache. Es ist nicht etwas, das man in ein oder zwei Wochen schlürfen kann, wie ich es bei Clojure getan habe (aber mein Clojure verfällt bereits mit den bahnbrechenden Änderungen, die eingeführt werden sollen - diese Sprache, obwohl schwer mit ihren eigenen Verdiensten, erinnerte mich im Gegensatz dazu an viel von dem, was ich an Common Lisp mag.) Sie sollten also viel von dieser Seite lesen und die HyperSpec einen Tastendruck fernhalten (für mich M-x hyperspec RET do-symbols RET
ist die Nähe zur Bibel ausreichend.) und darüber nachdenken, ein paar Bücher zu kaufen. Ich habe Practical Common Lisp , habe gerade Let Over Lambda bekommen und werde PAIP jetzt sehr bald kaufen .
Aber selbst wenn Common Lisp die wahre Antwort ist , werden Sie Ihre Zeit nicht vollständig verschwenden, indem Sie nur eine täuschend auffällige Alternative auswählen (- "trügerisch", weil der alltägliche CL Ihnen nicht alles zeigt, was seine Makros können, und das auch hat mehr Arten von Makros als jeder andere . Der übliche Vergleich ist zwischen schlechtem CL und syntaxoptimierter Alternative X). Sie werden immer noch die Grundlagen lernen, Sie können immer noch viel von dem verwenden, was Sie in SICP, On Lisp, The Little Schemer usw. lesen können . Ein Lisp, selbst das falsche Lisp, ist immer noch besser als ein Nicht-Lisp. (Aber Sie werden einen Teil Ihrer Zeit damit verbringen, Teile des richtigen Lisp schlecht in das falsche Lisp zu implementieren. Meta-Greenspun.)