2010-12-16 6 views
3

Schema vs Lisp? Was ich lernen soll, brauche ich Sprache für die funktionale Programmierung.Was zu lernen Schema vs Lisp

+0

[Dies] (http://Stackoverflow.com/questions/4460014/lisp-or-haskell-closed) geschlossen, warum fragen Sie noch einmal über "Scheme"? – khachik

+2

Schema ist ein Dialekt von LISP. (Wenn man sagt, dass "Schema ein besonders sauberer, gut durchdachter Dialekt von LISP" ist, würde dies auf subjektives Vorurteil hinweisen. Selbst wenn ich denke, dass es wahr ist.) –

+0

mögliches Duplikat von [Common Lisp oder Scheme?] (Http: // Paketüberfluss.com/questions/108201/common-lisp-or-scheme) –

Antwort

4

beantwortet Schon hier auf SO: Comparison Lisp vs Scheme

Beste Antwort von Vinko Vrsalovic:

Auszug aus Practical Common Lisp

Wenn Sie Lisp in der Vergangenheit verwendet haben, können Sie Ideen, was haben " Lisp " ist das haben wenig mit Common zu tun Lisp. Während Common Lisp verdrängte die meisten der Dialekte aus abstammt, ist es nicht die übrigen nur Lisp-Dialekt, und je nachdem, wo und wenn Sie Lisp ausgesetzt waren, können Sie sehr gut eine dieser anderen gelernt haben Dialekte.

Anders als Common Lisp, der eine universelle Lisp-Dialekt, hat immer noch eine aktive Benutzergemeinschaft ist Scheme. Common Lisp lieh ein paar wichtige Eigenschaften von Schema, aber nie beabsichtigt, es zu ersetzen.

Ursprünglich bei M.I.T. entworfen, wo sie schnell als Unterrichtssprache verwenden Bachelor Informatik Kurse hat Schema gesetzt wurde immer an einer anderen Sprache Nische als Common Lisp gegolten. Speziell in haben Schemes Designer darauf konzentriert, die Kernsprache so klein und so einfach wie möglich zu halten. Das hat offensichtliche Vorteile für eine Unterrichtssprache und auch für Programmiersprachenforscher, die gerne in der Lage sein, Dinge über Sprachen zu beweisen.

Es hat auch den Vorteil, es relativ einfach zu machen, die ganze Sprache zu verstehen, wie in der Standard angegeben. Aber es tut so auf Kosten des Auslassens vieler nützlicher Eigenschaften, die in Common Lisp standardisiert sind. Individuelles Schema Implementierungen kann bietet diese Funktionen in Umsetzung spezifische Weise, aber ihre Auslassung von der Norm macht es schwieriger tragbare Scheme Code zu schreiben, als portable gemeinsamen Lisp-Code zu schreiben.

Schema betont auch eine funktionale Programmierung Stil und die Verwendung von Rekursion viel mehr als Common Lisp tut. Wenn Sie Lisp in College studiert und kam mit der Eindruck, dass es nur eine akademische Sprache ohne Real-Welt Anwendung war, sind die Chancen, dass Sie gelernt Scheme. Dies ist nicht zu sagen, das ist eine besonders faire Charakterisierung von Schema, aber es ist noch weniger anwendbar zu Common Lisp, die ausdrücklich waren entworfen, um eine realer Engineering Sprache zu sein, anstatt eine theoretisch „reine“ Sprache.

Wenn Sie Scheme gelernt haben, sollten Sie auch beachten, dass eine Reihe von feine Unterschiede zwischen Schema und Common Lisp Sie stolpern können. Diese Unterschiede sind auch die Grundlage für mehrere mehrjährige Religionskriege zwischen den Hitzköpfe in den gemeinsamen Lisp und Scheme Gemeinden. Ich werde versuchen , einige der mehr wichtige Unterschiede, wie wir entlang gehen.

Zwei weitere Lisp Dialekte noch weit verbreitet sind Elisp, die Erweiterungssprache für den Emacs Editor und Autolisp, die Erweiterung Sprache für Autodesk AutoCAD Computer-Aided-Design-Tool. Obwohl ist es möglich, mehr Linien von Elisp und Autolisp haben als jeder anderen Dialekt von Lisp geschrieben worden ist, kann weder außerhalb ihrer Host-Anwendung verwendet werden, und beide sind ziemlich altmodisch Lisps im Vergleich zu entweder Scheme oder Common Lispeln. Wenn Sie einen dieser Dialekte verwendet haben, bereiten Sie vor, in die Lisp Zeitmaschine zu springen und mehrere Dekaden vorwärts zu springen.

+0

'beide sind ziemlich altmodische Lisps im Vergleich zu entweder Scheme oder Common Lisp' was macht einen Lisp altmodisch? – ArtB

1

Ich schlage Schema vor. Es ist ziemlich einfach und rein-funktional. CL ist groß, komplex und schwieriger zu erlernen, es unterstützt mehrere Paradigmen, Sie werden nicht die meiste Macht nutzen, wenn Sie Sprache ausschließlich für funktionale Programmierung wünschen.

+3

Schema ist "rein-funktional"? Das sind Neuigkeiten. –

+0

Nun, es gibt eine rein funktionale Teilmenge von Scheme, und keine konnte aus CL geschnitzt werden (da Tail-Rekursionsverhalten nicht spezifiziert ist). –

+0

Ich verwende LispWorks, eine Common Lisp-Implementierung. Der Compiler führt TCO durch. LispWorks hat also eine "rein funktionale" Untermenge. Genau wie viele andere CL-Implementierungen. Es ist genauso wichtig wie eine imaginäre, rein funktionale Teilmenge von Scheme. –

4

Ich denke, es ist objektiv wahr zu sagen, dass Schema etwas konsistenter und symmetrischer ist, wenn es um Namen und Konventionen geht. Triviales Beispiel: True und False sind #t und #f, nicht T und nil wie in Lisp. Sind Details wie diese ein Deal-Breaker? Natürlich nicht. Aber je weniger merkwürdige Ausnahmen Sie sich merken müssen, desto weniger abgelenkt sind Sie von den wichtigen Dingen.

Obwohl Sie Rekursion in Scheme verwenden können, können Sie auch Dinge tun, die nicht nach Rekursion riechen - wie das allseits beliebte named-let-Idiom, wo jeder es "loop" zu nennen scheint: (let loop() ...) - oder sogar explizite Schleifenkonstrukte.

Wie CL, Scheme nicht Kraft Sie zu funktionieren oder unveränderlich. Aber wenn Sie von einem imperativen Hintergrund kommen, ist es lohnend, sich durchzudrücken und schließlich "klicken" zu lassen, wie Sie Dinge schreiben, ohne Variablen neu zuzuweisen. Wenn Sie jedoch nicht möchten, dass diese Glühbirne Erfahrung, setzen Sie sich frei! Dinge zwingend.

Ich würde vorschlagen, Sie beginnen mit Scheme, und genauer gesagt mit Racket (früher "PLT Scheme"). Es kommt mit einer wunderbaren IDE, sehr guter Dokumentation und einer sehr hilfreichen Mailingliste. Es verfügt über Bibliotheken, mit denen Sie Programme in der realen Welt schreiben können, sowie sich durch großartige Bücher wie SICP oder HtDP zu arbeiten.

+0

+ für Schläger :) – Cynede

0

ich mit Clojure gehen würde, die meist Lisp-Dialekt für jetzt angenommen wird, habe ich Website Clojurecademy genannt für Anfänger leicht zu erlernen Clojure (hands-on).