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 einem v
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 Null dotimes
.
(loop as n from 1 to 10 do(format t"~d~%"n))
(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))
(dotimes(n 11)(format t"~v^~d~%"n n))
format(condition)
Das erste Argument format
kann eine der folgenden sein t
, nil
aka ()
, oder ein Strom. Wenn es übergeben wird t
, wird es an ausgegeben stdout
, wenn nil
die formatierte Ausgabe als Zeichenfolge zurückgegeben wird. Dies kann bedingt ausgegeben werden. Das obige Beispiel könnte genauso kurz geschrieben werden wie:
(dotimes(n 11)(format(> n 0)"~d~%"n))
Wenn ein Wert ausgegeben wurde, ist der Rückgabewert nil
. Aus diesem Grund kann es auch als Abschlussbedingung für eine do
Schleife verwendet werden:
(do((n 11))((<(decf n)1))(format t"~d~%"n))
(do((n 11))((format(>(decf n)0)"~d~%"n)))
~[...~]
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.
(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))
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 a fresh-line
.
Beide ~%
und ~&
können auch ein Argument mit einem v
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