Ist es möglich, Skripte in Lisp zu schreiben, im Gegensatz zu Ruby / Python / Perl / (akzeptierte Skriptsprache einfügen)? Darunter verstehe ich Dinge wie Dateiverarbeitung (öffne eine Textdatei, zähle die Anzahl der Wörter, gebe die n-te Zeile zurück), Stringverarbeitung (reverse, split, slice, Interpunktion entfernen), Prototyping / schnelle Berechnungen und andere Dinge, die du würdest verwende normalerweise Python, etc. für. Wie produktiv wären solche Aufgaben in einem Lisp im Gegensatz zu Ruby / Python / Perl / Skriptsprache der Wahl?
Ich frage, weil ich ein Lisp lernen will, aber es auch dazu verwende, etwas zu tun, anstatt es nur zu lernen. Ich schaute mich um, konnte aber nicht viele Informationen über Skripting in einem Lisp finden. Wenn es machbar ist, was wäre eine gute Umsetzung?
Danke!
Heute ist% c0_de% so, als ob es sicher wäre, dass irgendjemand verstehen würde, von welcher Sprache man spricht, da es seit den 70er Jahren oder wahrscheinlich auch einige Zeit davor keine Sprache mehr gab. LISP weist nur darauf hin, dass es sich um eine vollständig in Klammern gesetzte polnische Präfixnotation handelt, genau wie Pascal, Ruby, Python und Perl nur Variationen von ALGOL .
LISP
ist ein Standard und Scheme
ist ein Standard. Beides sind allgemeine Zwecke, obwohl Common LISP
Batterien enthält, während Common LISP
eine minimalistische Sprache ist. Sie sind ziemlich unterschiedlich im Stil, so vergleichen sie wäre Scheme
mit Java
zu vergleichen.
Eingebettete LISPS
Es gibt viele Arten von Python
und spezialisierte LISP-Dialekte als eingebettete Sprachen. Emacs ist der am häufigsten verwendete Editor im Unix-Segment und sein Lisp Scheme
ist die am häufigsten verwendete Lisp-Sprache Dies. Bildverarbeitungsapplikation GIMP hat eine elisp
Basis mit Erweiterungen für die Bildverarbeitung.
Standalone-Skripts
Es ist in vielen Scheme
Implementierung mit der Standard Common LISP
-Notation möglich, ein Skript als ausführbare Datei zu verwenden und es als Anwendung auszuführen. Z.B. Ich benutze #!
und habe Skripte mit CLISP
als erste Zeile. Ich verwende auch #!/usr/bin/clisp -C
auf die gleiche Weise und in dem sehr schnellen inkrementellen Compiler ikarus benutzt du Scheme
. #!/usr/bin/ikarus --r6rs-script
hat alle Möglichkeiten von Java-Bibliotheken und Sie können Ihre eigenen Klassen verwenden und es kann auch eine Anwendung mit Clojure
dauerhafte Anwendung
In #!/usr/bin/env java -cp /path/to/clojure-1.2.0.jar clojure.main
können Sie ein Bild ausgeben. Es wird eine Common Lisp-Binärdatei sein, deren Code bereits kompiliert ist. Viele Scheme-Implementierungen haben Kompilierung zu nativen und Common LISP
kann zu Java-Bytecode kompilieren (obwohl dies nicht die gebräuchlichste Methode ist). Ich habe immer noch Erfahrung damit, dass Ikarus manchmal schneller als eine kompilierte ausführbare Datei von Racket, Chicken und Gambit interpretiert, also programmiere ich oft in Clojure
und führe es in DrRacket
in Scheme aus.
Probieren Sie sowohl ikarus
als auch Common LISP
aus, da beide gut genug für die Aufgaben sind, die Sie in Ihrer Frage angegeben haben. Es gibt viele kostenlose Bücher zum Thema und einige sind ihren Preis wert. Sie können auch Scheme
ausprobieren, was ein Racket
mit vielen Bibliotheken für alltägliche Aufgaben ist, aber es entspricht keinem Standard.
Über die Produktivität
Ich stelle mir vor, du beziehst dich darauf, wie schnell du eine bestimmte Aufgabe in einem Lisp-Dialekt schreiben kannst. Ich denke, es hängt davon ab, wie du mit der Syntax umgehen kannst. Es dauert eine Weile, sich daran zu gewöhnen, nachdem man nur Algol-Dialekte kennt. Es erfordert andere Ansätze und Sie müssen auf eine funktionellere Weise denken, besonders für Scheme
. Ich stelle mir vor, wenn Sie in Schema so gut sind wie in Ihrem bevorzugten Algol-Dialekt, wird es ähnlich sein. Z.B. einige Algol-Dialekte sind schneller zu Prototyp Inn als andere und das gilt auch für Lisp Dialekte.
Als ich angefangen habe, in Lisp herumzustöbern, habe ich es zum Schreiben von Shell-Skripten verwendet ... Ich bin ein wenig über Ordnung und Einheitlichkeit und ich mochte Lisp-Sprachen wirklich, weil sie eine klarere Syntax haben (weniger Syntaxregeln, keine zufälligen Entscheidungen) zu bestimmten Syntaxelementen).
Wenn Sie in Common Lisp suchen, dann ist SBCL, wie es standardmäßig für jede Linux Distribution installiert ist, sofort für CGI Scripting verfügbar. SBCL hat auch die Möglichkeit, Befehlszeilenargumente, Zugriffspipes, Prozesse usw. zu verarbeiten. Wenn Sie nicht nach Portabilität zwischen verschiedenen Lisps suchen, dann würde ich sagen, dass Sie gut zu gehen sind. Nur um Ihnen Beispiele zu geben, wo ich dieses Scripting verwendet habe: Ein Mädchen in unserem Büro hat eine Liste von Wörtern zusammengestellt und gepflegt, die ich in unserer Anwendung weiterverarbeiten musste. Diese Liste war als Google-Tabellenkalkulation verfügbar. Mein Skript würde die Worts-Tabelle herunterladen und sie in das Format parsen, das ich brauchte. Ich hatte Skripte, die mir bei der Dateimanipulation und Vorverarbeitung geholfen haben, bevor das Projekt kompiliert wurde (das Projekt war nicht in Lisp).
Schließlich hat SBCL seine eigenen Mittel, um mit FastCGI Ссылка verwendet zu werden, aber natürlich gibt es mehrere voll -blown HTTP-Server, die Sie entweder unverändert verwenden oder hinter einen Proxy stellen können. Hunchentoot war historisch am beliebtesten, aber es gibt auch andere, wie cl-http
, hier sind einige weitere Links: Ссылка .
wäre der zu verwendende Shebang-Kommentar.
Außerdem benutze ich Common Lisp für meine Klassen, einfach um meine Hausaufgaben zu machen, was ich mir vorstelle, was du wolltest, als du sagtest "öffne eine Textdatei, zähle die Anzahl der Wörter, gebe die n-te Zeile zurück". Hier ist ein Beispiel, das ich für den Kurs zur Einführung in die Logik verwendet habe: Ссылка .
>Da es eine Diskussion darüber gab, ist hier noch etwas anderes zu beachten.
Typische Skriptsprachen haben eine zweifache Natur: Sie werden in einer Low-Level-Sprache geschrieben, während die High-Level-API dem Programmierer zur Verfügung gestellt wird. Dies kann ein Segen oder ein Fluch sein. Auf der einen Seite haben Sprachen wie Python, Ruby, JavaScript hoch optimierte Bibliotheken für den Umgang mit allgemeinen Aufgaben, während Common Lisp typischerweise, ähnlich wie C ++ oder Java, alles in Lisp implementiert. So sind zum Beispiel Strings in CL viel weniger ausgefeilt als in JavaScript: In CL sind sie einfache Arrays von Zeichen, während sie in JS eine besondere Art von Bäumen sind, die Seile genannt werden.
Normalerweise wird ein Programmierer, der in einer Skriptsprache schreibt, weder benötigt noch erwartet, dass er einen Hochleistungscode herausholt. Die Sprache kompensiert dies mit dem stark optimierten Bibliothekscode. Wenn der Programmierer tatsächlich so viel Leistung wie möglich aus der Skriptsprache herausquetschen möchte, scheint es, als hätten sie einfach nicht die Werkzeuge, um das zu tun, weil sie nicht bis zum Ende der Implementierung gelangen können.
>Auf der anderen Seite bedeutet der Umgang mit der niedrigeren Detailebene, dass der Programmierer insgesamt weniger produktiv ist, und dies würde mehr Geschick erfordern, da die Optimierung des Codes, um mit den Industriestandardimplementierungen Schritt zu halten, Geschick erfordert. p>
Common Lisp fällt im Allgemeinen unter die zweite Kategorie, aber ich würde behaupten, dass es immer noch gut für One-Liner und Casual-Programmierung ist, wegen der umfangreichen Bibliothek und des hochentwickelten Makrosystems, das es ermöglicht, Ebenensprachen.
Ich verstehe, dass Sie zwei Fragen gestellt haben:
Ich kann deine erste Frage beantworten, aber nicht deine zweite. Es hängt in hohem Maße von Ihren Systemkenntnissen ab und wie viel Code Sie im Schema (wieder) schreiben wollen, wie machbar es ist.
Ich beantworte also einfach Ihre ersten Fragen:)
Sehen Sie sich diese SO-Frage an: Running Scheme von der Befehlszeile aus >.
Wenn Sie zum Beispiel DrRacket installiert haben (was eine gute IDE für viele Schema-Dialekte ist), dann ist das Ihr Schema-Interpreter kann die Shebang-Zeile #! /usr/bin/env mzscheme
in Ihrem Schemaskript verwenden.
Dieses Testskript ( test.scm
)
kann ausführbar gemacht werden (mit chmod +x test.scm
) und ausgeführt werden (mit ./test.scm
).
Ich würde sagen, dass Lisp / Scheme verwendet werden könnte, um kleine Skripte oder große Anwendungen zu schreiben. Aber sie sind noch nicht für eine breite Verwendung bereit.
Der große Unterschied zwischen python / ruby und scheme besteht darin, dass Python eine riesige Bibliothek an Modulen hat, die an einer Stelle zentralisiert sind. Ruby ist sehr ähnlich zu Python mit Ruby Gems.
Scheme auf der anderen Seite könnte eine kleine Bibliothek von Modulen über das Internet verstreut haben. Die Qualität der Module vergleicht sich nicht immer mit den bekannten Modulen in Python und Ruby.
Man könnte sagen, dass sie auf ein anderes Ziel hinzielen, aber ich würde sagen, das Schema ist gerade alt geworden und die Leute haben angefangen, es zu vergessen und wie es als Werkzeug statt nur als Schulfach verwendet werden könnte.
Über Lisp kann ich nicht wirklich sagen. Aber von Ihrer Beschreibung her ist es möglich, Skripte zu schreiben, die Sie schreiben möchten, aber wenn Sie etwas Bestimmtes brauchen, ist es möglich, dass es nicht da ist und Sie es selbst neu schreiben müssen.
Alles, was ich sagen kann, springt ein. Und werde jemand, der dieser Sprache eine Zukunft gibt. Hab keine Angst. Diese Sprache hat eine strahlende Zukunft und du wirst viel daraus lernen.
WRT zu Ihren Aufgaben, was ist mit Emacs, das mit einer interaktiven Python-Shell kommt. So haben Sie die Möglichkeit, neben laufenden Skripten zu bearbeiten.