Ich möchte eine neue Sprache lernen und dachte, ich beginne mit Lisp. Ich möchte wissen, wenn ich Lisp lerne, kann ich auch Clojure (mit minimalem Aufwand), gibt es große Syntax-Unterschiede zwischen Lisp und Clojure?
Antworten
Zu viele Anzeigen?Es gibt keine großen Unterschiede in der Syntax (vor allem, weil die Sprachen der Lisp-Familie fast keine Syntax), aber es gibt sicherlich Unterschiede in anderen Bereichen. Clojure verfügt über viele moderne Programmierfunktionen, die sich besonders für eine hohe Skalierbarkeit eignen (Akteure, Referenzen usw.) und in einem "klassischen" Lisp (wie Common Lisp) nicht vorhanden sind.
Clojure ist ein aktiver, gut unterstützter Dialekt von Lisp. Wenn Sie eine Lisp-Sprache lernen wollen, können Sie mit Clojure nichts falsch machen.
Weitere Informationen finden Sie in den Antworten auf Welches Lisp soll ich lernen? .
Ich denke, man kann sagen, dass, wenn man die Grundsätze von LISP kennen Sie auch die Grundsätze von Clojure und andersherum. Sie sind alle in der gleichen Philosophie verwurzelt und betonen Dinge wie:
-
Code sind Daten. Makros sind ganz normale Funktionen, die Code manipulieren.
-
Verwendung von S-Ausdrücke um Daten und Code darzustellen.
-
Das Konzept einer Liste / Sequenz als grundlegende Struktur.
-
Funktionale Programmierung mit Funktionen erster Klasse.
Abgesehen davon gibt es viele Unterschiede in der Syntax, den Bibliotheken, den Laufzeitumgebungen usw. Meiner Meinung nach ist der Unterschied in etwa so groß wie zwischen C# und C++ - wenn Sie eine der beiden Sprachen gut kennen, werden Ihnen die Kernkonzepte vertraut sein, aber es gibt immer noch eine Menge grundlegender Unterschiede.
Siehe dies Liste von Möglichkeiten, wie sich Clojure von anderen Lists unterscheidet
Ich gehe davon aus, dass Sie mit Lisp Common Lisp meinen, da "Lisp" selbst eher eine Familie von Sprachen ist (zu der auch Clojure gehört) als eine einzelne spezifische Sprache. Es gibt einige syntaktische Änderungen, da Clojure ein moderneres Lisp sein soll. Zum Beispiel kann man Vektoren mit []s und Maps mit {}s erstellen, die nicht Teil von Common Lisp sind. Und natürlich wird die Java-Interop unweigerlich zu einem wichtigen Teil von Clojure.
Clojure verwendet Vektoren als Lambda-Parameter (Argumentwerte), aber Sie können ein Makro verwenden, um Versionen von defun y lambda in Common Lisp, die ähnlich aussehen wird. Clojure hat auch Zugriff auf Methoden und Felder von Java-Objekten, indem es einen Punkt (d.h. ".") und den Namen der Methode oder des Feldes verwendet, was wie ein normaler Funktionsaufruf aussieht.
(.toString 10) - ruft die Methode toString für die Zahl 10 auf, aber .toString ist keine Funktion. Wenn Sie versuchen, den Wert von .toString zu überprüfen, wird eine Ausnahme geworfen, dass .toString kein definiertes Symbol ist.
Und auch bei Quasi-Zitaten (meist in Makros) wird in Clojure statt eines Komas für unquote wie in Common Lisp eine Tilde verwendet.