Was ist der Unterschied zwischen Lisp-1 und Lisp-2?
Habe ich versucht zu verstehen, den Unterschied zwischen Lisp-1 und Lisp-2, und wie diese bezieht sich auf Clojure aber ich verstehe immer noch nicht richtig. Kann jemand mich aufklären?
InformationsquelleAutor Zubair | 2011-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut wikipedia:
Ist es im Grunde darüber, ob Variablen und Funktionen können denselben Namen haben, ohne Kollision. Clojure ist ein Lisp-1 was bedeutet, dass es nicht zulassen, dass die gleichen Namen verwendet werden, die für eine Funktion und eine variable gleichzeitig.
Ein Teil der Grund ist, dass Programmierer mit Lisp-2 Dialekte nicht gehen aus dem Weg, um Funktionen und Variablen mit dem gleichen Namen.
list
wird oft als eine Funktion der parameter, und niemand die Dinge, OMG, dass ist so verwirrend, da(list ...)
ist eine standard-Funktion. Viele Funktionen, dielist
als variable nicht dielist
- Funktion, oder verwenden Sie es nicht in der Nähe, die variable. Selbst wenn das passiert, es ist nicht allzu schlimm:(list foo list)
. Dies ist nicht mehr verwirrend, als ein Satz wie "den guten Kampf kämpfen", wo das gleiche Wort erscheint als Substantiv und verb.Java hat aber noch mehr Namen Räume,. Definieren Sie eine Klasse, eine Methode und eine variable mit dem gleichen Namen.
Wie eine Eselsbrücke, ich denke, dass der Lisp-1s als 1-namespace, und Lisp-2s mit 2-namespaces (eine für die Funktionen und eine für die Variablen).
InformationsquelleAutor pauldoo
Möchten Sie vielleicht, um diese zu Lesen Papier von Richard Gabriel. Es ist eine Zusammenfassung der Probleme, die der Lisp-community diskutiert in Lisp1 vs Lisp2. Es ist ein bisschen dicht und langsam bewegte sich in den ersten paar Kapitel, aber ist viel einfacher zu Lesen, durch die Zeit erhalten Sie Vergangenheit, Abschnitt 5.
Grundsätzlich Lisp1 hat eine einzige Umgebung, Karten, Symbole, Werte, und diese Werte können entweder "regelmäßig" oder Funktionen. Lisp2 hat (mindestens) zwei Namensräume (Symbole haben einen Steckplatz für Ihr Wert für die Funktion und einen regulären Wert). So, Lisp2, können Sie eine Funktion mit dem Namen foo und einen Wert mit dem Namen foo, in der Erwägung, dass in Lisp1, die Namen foo kann, beziehen sich nur auf einen einzelnen Wert (Funktion oder anderweitig).
Gibt es mehrere Nachteile und Unterschiede des Geschmacks zwischen den beiden, aber Lesen Sie das Papier für die details. Christian Queinnec Buch "Lisp in Small Pieces" hat auch die Diskussion über die Unterschiede gewebt durch den text.
wahrscheinlich, weil der große Punkt, der FP ist die Behandlung von Funktionen als first-class-Werte, daher ist es viel bequemer und konzeptionell-Reiniger zu behandeln, in der gleichen Weise wie alle anderen Werte
Wenn Benutzer von Lisp-1 Dialekte sagen tht-Lisp-1 ist mehr leitende zur funktionalen Programmierung, was Sie bedeuten, ist, dass Sie nicht haben, Sachen, die code voller
funcall
undfunction
Betreiber. Diese verschwinden in ein Lisp-1.Ein Beispiel dafür, was passiert, wenn ein Verbrecher versucht zu schreiben Lisp: emacs.stackexchange.com/q/28979/2787
Sie verwendet die Formulierung "mindestens" über Lisp-2. Die einfache Differenzierung zwischen den 2 Fällen: wenn das symbol in der Kopf-position einer s-expression ist, oder nicht (wenn ja, dann Suche in der Funktion namespace, sonst in der variable namespace). Können Sie einige Beispiele von anderen, als diese 2 Fälle?
InformationsquelleAutor Peter McLain