Ein-Liner-Programm
Im Computerprogrammierung, a Ein-Liner-Programm ursprünglich war eine Texteingabe in die Befehlszeile eines Betriebssystems Hülse Das führte eine Funktion in nur einer Eingabezeile aus. In der Gegenwart kann ein Einzeiler sein
- ein Ausdruck geschrieben in der Sprache der Shell;
- die Berufung eines Dolmetscher zusammen mit der Programmquelle für den Dolmetscher;
- die Berufung von a Compiler zusammen mit der Quelle zum Kompilieren und Anweisungen für Ausführung das zusammengestellte Programm.
Sicher Dynamische Sprachen zum Scripting, wie zum Beispiel Awk, sed, und Perl, waren traditionell geschickt darin, Einzeiler zu exprimieren. Shell -Dolmetscher wie z. Unix -Muscheln oder Windows PowerShell Erlauben Sie den Bau mächtiger Einzeiler.
Die Verwendung des Satzes Einzeiler wurde erweitert, um auch Programmquellen für jede Sprache einzubeziehen, die etwas Nützliches in einer Zeile tut.
Geschichte
Das Konzept eines Ein-Liner-Programms ist seit den 1960er Jahren bekannt[1] mit der Veröffentlichung der Apl Programmiersprache. Mit seiner knappen Syntax und leistungsstarken mathematischen Operatoren ermöglichte APL nützliche Programme in einigen Symbolen.
In den 1970er Jahren wurden Einzeiler mit dem Aufstieg der assoziiert Heimcomputer und BASIC. Computermagazine veröffentlicht Geben Sie Programme ein In vielen Dialekten von Basic. Einige Magazine widmeten regelmäßige Spalten ausschließlich beeindruckenden kurzen und einzeiligen Programmen.[2]
Das Wort Einzeiler hat auch zwei Referenzen im Index des Buches Die awk -Programmiersprache (Das Buch wird oft von der Abkürzung bezeichnet Tapl). Es erklärt die Programmiersprache Awk, was Teil der ist Unix Betriebssystem. Die Autoren erklären die Geburt der Einzeiler Paradigma mit ihrer täglichen Arbeit früh Unix Maschinen:
Die Version von 1977 hatte nur wenige integrierte Variablen und vordefinierte Funktionen. Es wurde für das Schreiben von kurzen Programmen entworfen […] unser Modell war, dass ein Aufruf ein oder zwei Zeilen lang sein, eingegeben und sofort verwendet würde. Die Standardeinstellungen wurden ausgewählt, um diesen Stil zu entsprechen […] wir sind die Autoren, die Autoren sind, wusste Wie die Sprache verwendet werden sollte, und deshalb schrieb wir nur Einzeiler.
Beachten Sie, dass diese ursprüngliche Definition von a Einzeiler impliziert eine sofortige Ausführung des Programms ohne Zusammenstellung. In einem strengen Sinne ist nur der Quellcode für interpretierte Sprachen als qualifiziert Einzeiler. Aber dieses strenge Verständnis von a Einzeiler wurde 1985 erweitert, als die IOCCC stellte die Kategorie von vor Beste One Liner zum C, was eine kompilierte Sprache ist.
Beispiele
Einzeiler werden auch verwendet, um die differentielle Ausdruckskraft von zu zeigen Programmiersprachen. Häufig werden Einzeiler verwendet, um die Programmierfähigkeit zu demonstrieren. Es werden häufig Wettbewerbe abgehalten, um zu sehen, wer den außergewöhnlichsten Einzelliner schaffen kann.
BASIC

Eine einzelne Linie von Basic kann normalerweise bis zu 255 Zeichen enthalten, und ein Liner reicht von einfachen Spielen[3] zu grafischen Demos. Einer der bekannteren Demo-Einzeiler ist umgangssprachlich bekannt als 10print, geschrieben für die Commodore 64:
10 DRUCKEN Chr $(205.5+RND(1)); : GEHE ZU 10
C
Das folgende Beispiel ist a C Programm (ein Siegereintrag in der Kategorie "Bester Ein-Liner" der Kategorie der IOCCC).
hauptsächlich(int c,verkohlen**v) {Rückkehr!m(v[1],v[2]);}m(verkohlen*s,verkohlen*t) {Rückkehr*t-42?*s?63==*t|*s==*t&&m(s+1,t+1):!*t:m(s,t+1)||*s&&m(s+1,t);}
Dieses One-Liner-Programm ist ein GLOB-Muster-Matcher. Es versteht die Glob -Zeichen "*" "null oder mehr Zeichen" und ""? Das heißt genau wie die meisten, genau wie die meisten Unix -Muscheln.
Führen Sie es mit zwei Argumenten aus, der String und dem Glob -Muster. Der Exit -Status beträgt 0 (Shell True), wenn das Muster übereinstimmt, 1 ansonsten. Das GLOB -Muster muss mit der gesamten Zeichenfolge übereinstimmen, sodass Sie * am Anfang und am Ende des Musters verwenden möchten, wenn Sie nach etwas in der Mitte suchen. Beispiele:
$ ./a.out foo 'f??'; Echo $? $ ./a.out "Bestes kurzes Programm" '??Pause?*'; Echo $?
Awk
Das Tapl Buch enthält 20 Beispiele von Einzeiler Am Ende des ersten Kapitels des Buches.
Hier sind die allerersten von ihnen:
- Drucken Sie die Gesamtzahl der Eingangsleitungen aus:
ENDE { drucken Nr }
- Drucken Sie die zehnte Eingangslinie:
Nr == 10
- Drucken Sie das letzte Feld jeder Eingabestelle:
{ drucken $Nf }
J
Hier sind Beispiele in J:
- Eine Funktion, um den Durchschnitt einer Liste von Zahlen zurückzugeben:
avg=: +/ % #
- Schnelle Sorte:
schnelle Sorte=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)
Perl
Hier sind Beispiele in der Perl Programmiersprache:
- Suchen Sie nach doppelten Wörtern
Perl -0777 -ne 'print "$.: doubled $_\n" while /\b(\w+)\b\s+\b\1\b/gi
''
- Finden Sie Palindrome in/usr/dict/words
perl -lne 'print if $_ eq reverse
'/usr/dict/words
- In-Place-Bearbeitung von *.c-Dateien, die alle Foo in Bar ändern
perl -p -i.bak -e 's/\bfoo\b/bar/g
' *.c
Viele Einzeiler sind praktisch. Zum Beispiel die folgenden Perl Ein-Liner wird alle Bytes in einer Datei umkehren:
Perl -0777e 'Scalar Reverse <>' drucken Dateiname
Während die meisten Perl Einzeiler sind unerlässlich, Perls Unterstützung für anonyme Funktionen, Verschlüsse, Karte, Filter (GREP) und FALT (Liste :: util :: record) ermöglicht die Erstellung von „funktionalen“ Einzeiler.
Dieser Einzeiler erstellt eine Funktion, mit der eine Liste von Primzahlen auf den Wert des ersten Parameters zurückgegeben werden kann:
mein $ z = Sub { Grep { $ a=$ _; !Grep { !($ a % $_) } (2..$ _-1)} (2..$ _[0])) }
Es kann in der Befehlszeile wie folgt verwendet werden:
Perl -e '$,=",";print sub { grep { $a=$_; !grep { !($a % $_) } (2..$_-1)} (2..$_[0]) }->(shift)
' Nummer
Ausdrucken einer von Kommas getrennten Liste von Primzahlen im Bereich 2 - Nummer.
Haskell
Folgende Haskell Programm ist ein Einzeiler: Es sortiert seine Eingangsleitungen Asciibetisch.
hauptsächlich = (MAPM_ putstrln . Daten.Aufführen.Sortieren . Linien) = << GetContents - In GHCI funktioniert ein qualifizierter Name wie data.list.sort, obwohl Sie als eigenständige ausführbare Datei Data.list importieren müssen.
Eine noch kürzere Version:
hauptsächlich = interagieren (Unline . Daten.Aufführen.Sortieren . Linien) - dito.
Nutzbar auf der Befehlszeile wie:
Katzenmateiname | GHC -E "Interact (Unline. Data.List.Sort. Zeilen)"
Schläger
Folgende Schläger Das Programm entspricht dem obigen Haskell -Beispiel:
#lang Schläger (für jeden displayln (Sortieren (Port-> Zeilen) String <?))
und dies kann wie folgt in der Befehlszeile verwendet werden:
Schläger -e '(for-each displayln (sort (port->lines) string))
''
Python
Ein direkt in der Unix-Befehlszeile durchzuführen Python's -cmd flag (kurz) und erfordert normalerweise den Import eines oder mehrerer Module. Aussagen werden unter Verwendung von "" getrennt; " anstelle von Newlines. Zum Beispiel, um das letzte Feld der Unix Long Listing zu drucken:
ls -l | Python -c "import sys;[sys.stdout.write(' '.join([line.split(' ')[-1]])) for line in sys.stdin]
"
Python Wrapper
Es wurden mehrere Open-Source-Skripte entwickelt, um den Bau von Python-Einzeilern zu erleichtern. Skripte wiePYP oder Pyline Importieren häufig verwendete Module und liefern mehr menschlich-lesbare Variablen, um die Python-Funktionalität auf der Befehlszeile zugänglicher zu machen. Hier ist eine Wiederholung des obigen Beispiels (Druck des letzten Feldes einer Unix -Long -Auflistung):
ls -l | PYP "Whitespace [-1]" # "Whitespace" repräsentiert jede Linie, die auf dem Weißraum in PYP aufgeteilt ist ls -l | Pyline "Wörter [-1]" # "Wörter" repräsentiert jede Zeile, die auf dem Weißraum in Pyline geteilt wird
Ausführbare Bibliotheken
Das Python CGIHttpServer -Modul ist beispielsweise auch eine ausführbare Bibliothek, die als Webserver mit CGI durchgeführt wird. Um den Webserver zu starten, geben Sie ein:
$ python -m cgihttpserverServieren von HTTP auf 0.0.0.0 Port 8000…
TCL -Werkzeugkontrollsprache
TCL (Tool -Befehlssprache) ist eine dynamische Programmier-/Skriptsprache, die auf Konzepten von LISP-, C- und UNIX -Shells basiert. Es kann interaktiv oder durch Ausführen von Skripten (Programmen) verwendet werden, die ein Paketsystem zur Strukturierung verwenden können. Im Folgenden finden Sie direkte Zitate aus Wiki Books TCL -Programmierung. Der Text in der TCL-Programmierung von Wiki Books ist unter der Creative Commons Attribution-Sharealike-Lizenz erhältlich.
Viele Saiten sind auch gut geformte Listen. Jedes einfache Wort ist eine Liste von Länge eins, und Elemente längerer Listen werden durch Whitespace getrennt. Zum Beispiel eine Zeichenfolge, die einer Liste von drei Elementen entspricht:
einstellen Beispiel {Foo Bar Grill}
Saiten mit unausgeglichenen Zitaten oder Klammern oder Nicht-Raum-Zeichen, die direkt nach Abschlussklammern direkt nach Abschluss der Klammern als Listen analysiert werden können. Sie können sie explizit aufteilen, um eine Liste zu erstellen.
Der "Konstruktor" für Listen wird natürlich als Liste bezeichnet. Es wird empfohlen, zu verwenden, wenn Elemente aus einer Variablen oder Befehlssubstitution stammen (die Zahnspangen werden dies nicht tun). Da TCL -Befehle ohnehin Listen sind, ist Folgendes ein vollständiger Ersatz für den Befehl List:
# One Liners -Programm Proc aufführen Args {einstellen Args}
Windows PowerShell
Finden von Palindromen in Dateiwörtern.txt
Treffen Wörter.txt | Wo { $ _ -eq -beitreten $ _[($ _.Länge-1) ..0] }
Die Rohrleitungssemantik in PowerShell ermöglicht komplexe Szenarien mit Ein-Liner-Programmen. Dieser Ein-Liner im PowerShell-Skript enthält eine Liste von Namen und Zählungen aus einer von Kommas getrennten Wertdatei und gibt die Summe der Zählungen für jeden Namen zurück.
IPCSV . \Obst.txt –H F, C|Gruppe F|%{@{{{"$ ($ _.Name)"= ($ _.Gruppe|messen C -Summe).Summe}} |Sortieren Wert
Siehe auch
Verweise
- ^ 10 Print CHR $ (205,5 + RND (1)); : Goto 10 (PDF). MIT Press. 2014. p. 148. ISBN 9780262526746. Abgerufen 3. Juli 2018.
- ^ "Run Magazine Ausgabe 35".
- ^ "Acorn User One-Line-Spiele (Flucht vor Voros, Lexxias, Rennen nach Vagon, Sturmwolken über Zaqqit, Zander (auch bekannt als Lurch)") ". bbcmicro.co.uk. Abgerufen 3. Juli 2018.
Externe Links
- Perl -Programmierlinks
- Wikibooks Kostenlose TCL -Programmierung Einführung & Download PDF
- SourceForge, Laden Sie die Website und auch mehrere Computersprachen herunter
- TCL -Quellen, Haupt -TCL- und TK -Quellcode -Download -Website
- Tcler's Wiki, TCL/TK -Skripte und Referenz -Clearing House
- Tkdocs, Offizielle Dokumentation und Archive von TCL/TK