Ist es möglich, Lisp / Scheme als Skriptsprache zu verwenden? [geschlossen]

8

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!

    
Impossibility 18.11.2013, 07:49
quelle

5 Antworten

8

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

erstellt werden

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.

    
Sylwester 18.11.2013, 12:07
quelle
4

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: Ссылка .

%Vor%

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.

    
user797257 18.11.2013 11:37
quelle
1

Ich verstehe, dass Sie zwei Fragen gestellt haben:

  1. Ist es möglich, Schemaskripte von einer Befehlszeile aus auszuführen
  2. ?
  3. Wie effektiv ist das?

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 )

%Vor%

kann ausführbar gemacht werden (mit chmod +x test.scm ) und ausgeführt werden (mit ./test.scm ).

    
tessi 18.11.2013 08:06
quelle
1

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.

    
Loïc Faure-Lacroix 18.11.2013 08:09
quelle
0

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.

    
Andreas Röhler 18.11.2013 14:51
quelle

Tags und Links