Welche allgemeinen Tipps gibt es zum Golfen in Lisp (beliebiger Dialekt)? Bitte posten Sie einen Tipp pro Antwort und nur Antworten, die für einen Lisp-Dialekt spezifisch sind (z. B. "Kommentare entfernen" ist keine Antwort).
Bitte posten Sie den Dialekt von Lisp, für den Ihr Tipp gilt, mit Ihrem Tipp.
Antworten:
Ordnen Sie Funktionsparameter an, um Leerzeichen zu minimieren
Anstatt von
versuche so etwas wie
quelle
Drucken Sie Zeichenfolgen, die aus Großbuchstaben bestehen, über Druckatome
Die
princ
Funktion in Common Lisp ist kurz und druckt Objekte ohne Escapezeichen. Wenn Sie Common Lisp-Symbole drucken, die die Synax haben'symbol-name
, müssen Sie keine Anführungszeichen für das , was Sie drucken möchten, und Sie können auch Leerzeichen sparen. Beachten Sie, dass beim Drucken von Symbolen diese großgeschrieben werden. Außerdem wird weder eine neue Zeile noch ein Leerzeichen hinzugefügt, sodass keine Verkettung erforderlich ist.Beispielsweise,
wird gedruckt
HAI
.Und
druckt
HAI
, fragt nach Eingabe und druckt sie wieder aus, z. B. wenn Sie Hallo eingeben, ist das Ergebnisquelle
Verwenden Sie
1+
und1-
zum Inkrementieren und DekrementierenAnstelle von
(+ a 1)
oder(- b 1)
versuchen(1+ a)
oder(1- b)
.quelle
1+
als zwei Token analysiert,1
und+
? Ich dachte es wäre+1
.1+
und1-
werden als ein einzelnes Token analysiert Common Lisp HyperSpec Function 1+, 1-Verwenden Sie
loop
undformat
, wieprintf
bei Steroiden.format
Enthält Iterationen und Bedingungen sowie römische Ziffern, englische Zahlen und englische Pluralformen. Es ist sehr, sehr hässlich und sehr kompakt.quelle
Bedingte Ausgabe
GNU Common Lisp
~v^
Die Up-and-Out- Direktive
~^
wird am häufigsten in einer Listenformatierungsoperation verwendet, um nach dem letzten Listenelement zu beenden. Es kann jedoch auch mit einemv
Modifikator verwendet werden, um ein Argument zu verwenden. In diesem Fall wird es beendet, wenn dieses Argument Null ist. Dies ist besonders nützlich für den Umgang mit der von erzeugten Nulldotimes
.format(condition)
Das erste Argument
format
kann eine der folgenden seint
,nil
aka()
, oder ein Strom. Wenn es übergeben wirdt
, wird es an ausgegebenstdout
, wennnil
die formatierte Ausgabe als Zeichenfolge zurückgegeben wird. Dies kann bedingt ausgegeben werden. Das obige Beispiel könnte genauso kurz geschrieben werden wie:Wenn ein Wert ausgegeben wurde, ist der Rückgabewert
nil
. Aus diesem Grund kann es auch als Abschlussbedingung für einedo
Schleife verwendet werden:~[...~]
Der bedingte Formatierer verwendet ein Argument und wählt eine Formatierungszeichenfolge aus einer Liste nach Index aus. Ein häufiger Anwendungsfall ist die
~:;
Auswahl des Standardformatierers zwischen Null und nicht Null.Bedingte Formatierer können auch verschachtelt werden. In diesem Fall verbraucht jeder nacheinander ein Argument.
~&
In jedem der obigen Beispiele
~%
wird eine neue Zeile ausgegeben. In den meisten Fällen könnte dies durch einen wörtlichen Zeilenumbruch ersetzt werden. Eine andere Option ist die Verwendung~&
, die genau dann eine neue Zeile ausgibt, wenn sich der Ausgabecursor nicht am Anfang einer Zeile befindet, auch bekannt als afresh-line
.Beide
~%
und~&
können auch ein Argument mit einemv
Modifikator oder als Konstante annehmen und werden so viele Zeilenumbrüche erzeugen. Sie werden auch beide gerne ein negatives Argument akzeptieren. In diesem Fall geben sie nichts ab.Externe Referenzen
Praktisches Common Lisp
18. Einige FORMAT-Rezepte
Common Lisp the Language, 2. Auflage
22.3.3. Formatierte Ausgabe in Zeichenströme
quelle