Wyjście warunkowe
GNU Common Lisp
~v^
Dyrektywa zwiększania i wyłączania ~^jest najczęściej używana w operacji formatowania listy w celu zakończenia jej po ostatnim elemencie listy. Można go jednak również użyć z vmodyfikatorem do zużywania argumentu, w którym to przypadku kończy się, jeśli argument ten wynosi zero. Jest to szczególnie przydatne w przypadku zera wytwarzanego przez 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)
Pierwszym argumentem formatmoże być jeden t, nilaka (), lub strumienia. Jeśli zostanie przekazany t, wyśle go do stdout, jeśli nilzwróci sformatowane wyjście jako ciąg. Można to wykorzystać warunkowo. Powyższy przykład można napisać równie krótko, jak:
(dotimes(n 11)(format(> n 0)"~d~%"n))
Jeśli wyprowadzono wartość, zwracana będzie wartość nil. Z tego powodu może być również używany jako warunek zakończenia dopętli:
(do((n 11))((<(decf n)1))(format t"~d~%"n))
(do((n 11))((format(>(decf n)0)"~d~%"n)))
~[...~]
Formater warunkowy zużywa argument i wybiera ciąg formatujący z listy według indeksu. Częstym przypadkiem użycia jest domyślny formatyzator, ~:;który wybiera pomiędzy zero a zero.
(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))
Można również zagnieżdżać formatory warunkowe, w którym to przypadku każdy z nich zużyje argument.
~&
W każdym z powyższych przykładów ~%zastosowano znak nowej linii. W większości przypadków można to zastąpić dosłownie nową linią. Inną opcją jest użycie ~&, która wyemituje nowy wiersz wtedy i tylko wtedy, gdy kursor wyjściowy nie znajduje się na początku linii, czyli a fresh-line.
Oba ~%i ~&mogą również przyjmować argument, z vmodyfikatorem lub jako stałą, i wygenerują tyle nowych linii. Oboje również chętnie zaakceptują argument negatywny, w którym to przypadku nic nie emitują.
Referencje zewnętrzne
Praktyczne wspólne Lisp
18. Kilka przepisów na formaty
Common Lisp the Language, wydanie drugie
22.3.3. Sformatowane wyjście do strumieni znaków