Умовний вихід
GNU Common Lisp
~v^
Вгору і з директиви ~^
найбільш часто використовується в списку операції форматування припинити після останнього елемента списку. Однак він також може використовуватися з v
модифікатором для споживання аргументу, і в цьому випадку він припиняється, якщо цей аргумент дорівнює нулю. Це особливо корисно для боротьби з нулем, виробленим компанією 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)
Перший аргумент format
може бути один з t
, nil
він же ()
, або потік. Якщо передано t
, він виведе stdout
, якщо nil
він поверне відформатований вихід у вигляді рядка. Для цього можна використовувати умовно вихід. Наведений приклад можна написати так само коротко, як:
(dotimes(n 11)(format(> n 0)"~d~%"n))
Якщо було виведено значення, значення повернення буде nil
. Через це він також може бути використаний як завершальний стан для do
циклу:
(do((n 11))((<(decf n)1))(format t"~d~%"n))
(do((n 11))((format(>(decf n)0)"~d~%"n)))
~[...~]
Умовний форматник споживає аргумент і вибирає рядок форматування зі списку за індексом. Загальний випадок використання - це форматер за замовчуванням ~:;
для вибору між нулем і не нулем.
(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))
Також можуть бути вкладені умовні форматори, і кожен з них по черзі буде використовувати аргумент.
~&
У кожному з наведених вище прикладів ~%
використовується випромінювання нового рядка. У більшості випадків це може бути замінено буквальним новим рядком. Іншим варіантом є використання ~&
, яке випромінює новий рядок, якщо і тільки якщо курсор виводу не знаходиться на початку рядка, він жеfresh-line
.
І те, ~%
і ~&
також може взяти аргумент, з v
модифікатором або як константа, і дасть стільки нових рядків. Вони також із задоволенням приймуть негативний аргумент, і в цьому випадку нічого не випромінюють.
Зовнішні посилання
Практичний звичайний ліс
18. Невеликі рецепти ФОРМАТУВАННЯ
Common Lisp the Language, 2-е видання
22.3.3. Форматований вихід у символьні потоки