Was sind die tatsächlichen Unterschiede zwischen Scheme und Common Lisp? (Oder irgendwelche anderen zwei Dialekte von Lisp)
Hinweis: ich bin nicht bitten, das zu lernen, was besser ist, oder etwas ähnliches.
Nahm ich die Kostenlose version von SICP weil ich fühlte, es wäre schön zu Lesen (ich habe gehört, gute Dinge über es, und ich bin interessiert in diese Art der Seite der Programmierung).
Ich weiß Scheme ist ein Dialekt von Lisp, und ich fragte mich: was ist eigentlich der Unterschied zwischen Schema und, sagen wir, Common Lisp?
Es scheint eine Menge über 'CL hat eine größere stdlib...Schema ist nicht gut für die Echtzeit-Welt der Programmierung..' aber keine eigentlichen Sache zu sagen 'dies ist, weil CL ist diese/dieses'.
InformationsquelleAutor der Frage The Communist Duck | 2011-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine etwas schwierige Frage, da die Unterschiede sowohl in technischer als auch (noch wichtiger ist, meiner Meinung nach) kulturell. Eine Antwort kann immer nur bieten eine ungenaue, subjektive Sicht. Dies ist, was ich bin werde hier. Für einige raw-technische details finden Sie in der Schema Wiki.
Schema ist eine Sprache, basiert auf dem Prinzip der bietet eine elegante, konsistente, gut durchdachte Basis-Sprache, die das Substrat, die beide praktischen und wissenschaftlichen Anwendung Sprachen aufgebaut werden kann.
Selten werden Sie jemanden finden, der eine Anwendung schreiben, die in reiner R5RS (oder R6RS) Schema, und weil der minimalistische standard, die meisten code ist nicht portabel Scheme-Implementierungen. Dies bedeutet, dass Sie wählen müssen Sie das Scheme-Implementierung sorgfältig, sollten Sie schreiben wollen, eine Art von end-user-Anwendung, weil die Wahl wird weitgehend bestimmen, welche Bibliotheken Ihnen zur Verfügung stehen. Auf der anderen Seite, die relative Freiheit in der Gestaltung der tatsächlichen Anwendung der Sprache bedeutet, dass Scheme-Implementationen bieten oft features unerhört anderswo; PLT-Schläger, zum Beispiel, können Sie Gebrauch machen von der statischen Typisierung und bietet eine sehr Sprache-aware IDE.
Interoperabilität über die Basis-Sprache, die durch die community-driven SRFI-Prozess, aber die Verfügbarkeit eines bestimmten SRFI variiert je nach Umsetzung.
Meisten Schema-Dialekte und Bibliotheken, konzentrieren sich auf die funktionale Programmierung Redewendungen wie Rekursion statt iteration. Es gibt verschiedene Objekt-Systeme, die Sie laden können Bibliotheken, wenn Sie wollen, zu tun ist OOP, aber die integration mit vorhandenen code hängt stark von der Scheme-Dialekt und der umgebenden Kultur (Huhn Plan scheint zu sein, mehr Objekt-orientiert als Schläger, zum Beispiel).
Interaktive Programmierung ist ein weiterer Punkt, dass die Regelung untergemeinschaften unterscheiden. MIT Schema ist bekannt für starke interactivitiy Unterstützung, während PLT-Schläger fühlt sich eher statisch. In jedem Fall, interaktive Programmierung nicht zu sein scheinen ein zentrales Anliegen der meisten Schema untergemeinschaften, und ich habe noch um zu sehen, eine Programmierumgebung, ähnlich interaktiv wie die meisten Common Lisps'.
Common Lisp ist ein Schlacht-worn Sprache konzipiert für die praktische Programmierung. Es ist voll von hässlichen Warzen und Kompatibilität hacks-ganz im Gegenteil-Schema eleganten Minimalismus. Aber es ist auch viel mehr ausgereifter als für sich selbst genommen.
Common Lisp gezüchtet hat einen relativ großen ökosystem tragbare Bibliotheken. Sie können in der Regel wechseln Implementierungen jederzeit, auch nach der Bereitstellung von Anwendungen, ohne zu viel Mühe. Insgesamt Common Lisp ist viel gleichmäßiger als Schema und radikaler Sprache, Experimente, wenn überhaupt, sind in der Regel eingebettet wie eine tragbare Bibliothek, eher als die Definition eine ganz neue Sprache-Dialekt. Weil dieses, die Sprache Erweiterungen sind eher konservativ, aber auch mehr kombinierbar (und oft optional).
Universell nützliche Spracherweiterungen, wie ausländische-Funktion Schnittstellen sind nicht entwickelt, die durch die formalen Mittel, sondern verlassen sich auf quasi-standard-Bibliotheken zur Verfügung, die auf allen wichtigen Common-Lisp-Implementierungen.
Sprache Redewendungen sind eine wilde Mischung funktional, Imperativ und Objekt-orientierte Ansätze, und im Allgemeinen, Common Lisp fühlt sich mehr wie eine imperative Sprache als eine funktionale. Es ist auch sehr dynamisch, wohl mehr als jede andere die beliebte dynamische Skriptsprachen (Klasse Neudefinition gilt für bestehende Instanzen, zum Beispiel, und die Bedingung-handling-system hat die Interaktivität direkt mit integriert) und die interaktive, explorative Programmierung ist ein wichtiger Teil des "Common Lisp Weg." Dies spiegelt sich auch in den Programmierumgebungen verfügbar für Common Lisp, praktisch alle von denen bieten eine Art der direkten Interaktion mit dem ausführen von Lisp-compiler.
Common Lisp verfügt über eine eingebaute object system (CLOS), ein Zustand, handling-system deutlich leistungsfähiger als bloße exception handling, run-time-patchability, und verschiedene Arten von built-in Daten-Strukturen und Funktionen (einschließlich des berüchtigten SCHLEIFE makro, eine iteration subsprache viel zu hässlich für das System, aber viel zu nützlich, nicht zu erwähnen, wie auch eine printf-ähnliche Formatierung Mechanismus mit GOTO Unterstützung in format-strings).
Sowohl wegen der Bild-basierte, interaktive Entwicklung, und wegen der größeren Sprache, Lisp-Implementierungen sind in der Regel weniger portabel Betriebssysteme als Scheme-Implementierungen sind. Erste Common Lisp laufen auf einem embedded-Gerät ist nicht für das schwache des Herzens, zum Beispiel. Ähnlich wie die Java Virtual Machine, Sie neigen auch dazu, Probleme auf Rechnern, auf denen virtuelle Speicher beschränkt ist (wie OpenVZ-basierte virtuelle Server). Scheme-Implementierungen auf der anderen Seite, sind eher kompakt und tragbar. Die zunehmende Qualität der ECL-Implementierung wurde gemildert dieser Stelle etwas, aber sein Wesen ist immer noch wahr.
Falls du dich für kommerziellen support, es gibt ein paar Unternehmen, die Ihre eigenen Common Lisp-Implementierungen, einschließlich grafischer GUI-Erbauer, der spezialisierte Datenbank-Systeme et cetera.
Zusammenfassenddas Schema ist mehr elegant gestaltete Sprache. Es ist in Erster Linie eine funktionale Sprache, mit einigen dynamischen Eigenschaften. Seine Implementierungen repräsentieren verschiedene inkompatible Dialekte mit Besonderheiten. Common Lisp ist ein vollwertiges, hoch dynamische, multi-Paradigma Sprache, die mit verschiedenen hässlich, aber pragmatische Funktionen, deren Implementierungen sind weitgehend miteinander kompatibel. Scheme-Dialekten sind eher statisch und weniger interaktiv als Common Lisp; Common Lisp-Implementierungen tendenziell schwerer und schwieriger zu installieren.
Welche Sprache Sie sich entscheiden, ich Wünsche Ihnen viel Spaß! 🙂
InformationsquelleAutor der Antwort Matthias Benkard
Einige grundlegende praktische Unterschiede:
(function ...)
und explizit eine Funktion aufgerufen wird, gespeichert in einem Wert mit(funcall ...)
nil
(die leere Liste) wird als false (z.B. inif
), und ist das nur ein false-Wert. In Scheme die leere Liste wird als wahr angesehen wird, und (deutlich)#f
ist das nur ein false-WertInformationsquelleAutor der Antwort newacct
Das ist eine schwierige Frage zu beantworten, unparteiisch vor allem, weil viele der LISP-Leute klassifizieren würde-Schema als eine LISP.
Josh Bloch (und diese Analogie kann nicht seine Erfindung) beschreibt die Wahl einer Sprache als verwandt mit der Auswahl einer lokalen Kneipe. In diesem Licht, dann:
Dem "System" pub hat eine Menge Programmier-Sprachen die Forscher. Diese Menschen verbringen eine Menge Aufmerksamkeit auf die Bedeutung der Sprache, auf halten Sie es klar und einfach, und die Erörterung der neuen, innovativen features. Jeder hat Ihre eigene version der Sprache, soll es ermöglichen, Sie zu erforschen, Ihre eigenen bestimmten Ecke der Programmiersprachen. Die betreffenden Personen wirklich wie den in Klammern gesetzten syntax, die Sie nahm aus LISP; es ist flexibel und leicht und einheitlich und entfernt viele Barrieren der Sprache-Erweiterung.
"LISP" Kneipe? Naja... sollte ich nicht kommentieren; ich habe Sie nicht lange genug dort :).
InformationsquelleAutor der Antwort John Clements
Schema:
common lisp:
sind einige Punkte, sicher, es gibt viele mehr, die ich mich nicht erinnern jetzt.
InformationsquelleAutor der Antwort Moe