Hilft das Lernen eines Lisp beim Lernen des anderen?

9

Gibt es eine Synergie zwischen dem Erlernen verschiedener Lisp-Sprachen? Ich lerne gerade Emacs Lisp, da es sofort in meiner täglichen Emacs Verwendung nützlich ist, aber ich bin fasziniert von allen Lisps, vielleicht werde ich eines Tages andere lernen und benutzen. Wird mir das Lernen von Emacs Lisp helfen, wenn ich anfange, Common Lisp, Scheme oder Clojure zu erforschen? Mit anderen Worten, wird es für mich wie eine völlig neue Sprache lernen oder sind einige Begriffe und Paradigmen üblich? Ich bin auch daran interessiert, einzigartige Unterschiede zwischen den Lisps zu vergleichen, was ein Problem sein wird, wenn ich von einem Lisp zum anderen komme.

In Wie lernst du Common Lisp und Emacs Lisp? es wird erwähnt, dass es "Verschwendung" geben wird, aber in welchem ​​Maße wird nicht ausgearbeitet.

    
Mirzhan Irkegulov 28.06.2012, 11:46
quelle

2 Antworten

15

Ja - es ist wesentlich einfacher, ein neues Lisp zu laden, wenn Sie bereits eins kennen.

Gründe:

  • Sie werden das Konzept von "code is data" und Metaprogrammierung in einer homoonischen Sprache verstehen (das ist wohl das größte einzelne Ding, das Lisps einzigartig / unverwechselbar von anderen Sprachen macht)
  • Sie können die Lisp-Syntax viel einfacher lesen. Es dauert ein paar Wochen, bis Sie die Struktur des Lisp-Codes "sehen", aber danach wird es viel einfacher. Sie beginnen nach einer Weile, die Klammern zu ignorieren.
  • Der Entwicklungsstil ist ähnlich und interagiert mit einer laufenden Umgebung unter Verwendung einer REPL
  • Sie teilen allgemeine Idiome, z.B. die Verwendung von Listen und verschiedenen funktionalen Programmiertechniken
mikera 28.06.2012, 12:09
quelle
18

Wenn Sie einige ältere Grundlagen von Lisp lernen wollen, dann ist Emacs Lisp in Ordnung.

  • Emacs Lisp: kann in Emacs verwendet werden. Entwicklungsumgebung enthalten. Älterer Dialekt des Mainstream Lisp. Fehlt eine Menge Konzepte. Hat viele Erweiterungen für die Editor-Programmierung. Common Lisp und Emacs Lisp teilen einige direkte Erbe (Benennung, Konzepte, ...).

  • Gemeinsame Lisp. Viele gute Bücher, von denen man lernen kann. Viele Lisp-Konzepte (einschließlich OO-Programmierung) können mit Common Lisp gelernt werden. Sehr empfehlenswert. Common Lisp verfügt über die wichtigsten integrierten Lisp-Funktionen und Bibliotheken bieten den Rest. Es gibt eine große Menge von Sachen, die man um sie herum lernen kann.

  • Schema: Unterschiedlicher Lisp-Dialekt in den 70er Jahren. Nicht direkt kompatibel mit Emacs Lisp oder Common Lisp. Viele ausgezeichnete Bücher und anderes Tutorial-Material. Sehr empfehlenswert zum Erlernen von Lisp-Grundlagen und einiger fortgeschrittener Dinge. Je tiefer Sie in Schema eintauchen, desto mehr unterscheidet es sich von Emacs Lisp oder sogar Common Lisp.

  • Clojure: sehr unterschiedlicher Lisp-Dialekt. Nicht kompatibel mit Common Lisp, Emacs Lisp oder Scheme. Teilt einige Konzepte, einige Konzepte funktionieren anders. Gute Bücher. Empfohlen, wenn Sie etwas Lisp oder speziell Clojure lernen möchten. Clojure legt Wert auf funktionale und gleichzeitige Programmierung - sehr relevante Themen.

Wenn Sie mehr Mainstream-Lisp (ein Lisp mit dem Aussehen eines typischen Lisp-Dialekts) lernen möchten, würde ich Common Lisp oder Scheme empfehlen.

Meine bevorzugte Sprache für das Lernen von Lisp (!) wäre:

  1. Gemeinsame Lisp
  2. Schema
  3. Clojure
  4. Emacs Lisp

Um Ihnen ein Beispiel zu geben:

Dies ist die Funktion COLLAPSE von McCarthy's Lisp , geschrieben 1960 (aus dem Lisp I Programmierhandbuch, 1960 , Seite 101). Im Grunde ist es in vielen Lisp-Übungen die Funktion FLATTEN . Sie benötigt eine verschachtelte Liste und gibt eine neue Liste mit den Atomen in einer einzelnen Liste zurück.

%Vor%

Dies ist die Common Lisp -Version. Sie können es in Großbuchstaben speichern oder in Kleinbuchstaben konvertieren. Beides funktioniert.

%Vor%

Es ist im Grunde das Gleiche. Nur das Formular zum Definieren von Funktionen hat einen anderen Namen und eine andere Syntax. Ansonsten ist der Code vollständig identisch.

Versuchen Sie McCarthy's Beispiel in Common Lisp :

%Vor%

Es läuft.

Versuchen wir es jetzt in Emacs Lisp mit GNU Emacs. Emacs Lisp hat Kleinbuchstaben:

%Vor%

Es läuft in Emacs Lisp ohne Änderungen.

Sie können ähnliche Versionen in Schema (kleinere Umbenennungen) erhalten:.

Hier in Petite Chez-Schema :

%Vor%

Wir können DEFINE verwenden, um eine Funktion zu definieren. COND sieht etwas anders aus. () ist die leere Liste. Prädikate haben eine ? hinzugefügt.

%Vor%

Läuft.

In Clojure würde es anders aussehen. Im Grunde müssen Sie einen großen Teil des Codes überdenken.

Dies ist Clojures eigene Implementierung von flatten :

%Vor%

Sie können ein flatten im Geiste der Lisp-Version schreiben - es würde immer noch anders aussehen.

Von rosetta.org :

%Vor%

Namen sind unterschiedlich, Syntax ist anders, Semantik ist anders (funktioniert bei Lazy-Sequenzen anstelle von Listen).

Dialekte wie Common Lisp, Emacs Lisp, Visual Lisp, ISLISP und andere versuchen, das Erbe zu bewahren.

Dialekte wie Scheme oder Clojure fühlten sich nicht an die Namen und die Syntax gebunden. Sie innovierten in verschiedene Richtungen. Schema bietet immer noch direkte Versionen der alten Funktionalität. Clojure nicht. Clojure-Programmierer sehen das nicht als Nachteil.

    
Rainer Joswig 28.06.2012 12:00
quelle