14 Stimmen

Gibt es große Unterschiede in der Syntax zwischen Clojure und Lisp

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?

12voto

Greg Hewgill Punkte 882617

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? .

6voto

Psyllo Punkte 664

90 % dessen, was Sie bei Ihrem ersten Lisp-Studium lernen, wird sich auf Ihr nächstes übertragen.

3voto

mikera Punkte 103423

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

2voto

Nick Punkte 373

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.

1voto

jcubic Punkte 56135

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X