Все достаточно зрелые языки программирования проходят стадию добавления в строки другого языка программирования, часто для управления выводом на печать. Действительно зрелые языки программирования проходят этот этап: CL еще не настолько зрел, и все еще имеет FORMAT
управляющие строки. И вы можете делать с ними что угодно.
Небольшой вариант вашего примера - заставить FORMAT
напечатать список:
> (format t "~&~{~A~^, ~}.~%" '(1 2 3 4 5))
1, 2, 3, 4, 5.
Что означает эта управляющая строка:
~&
- находиться в начале строки;
~{
- начать итерацию по списку;
~A
- печатать каждый элемент как PRINC
;
~^
- после печати последнего элемента остановитесь здесь;
,
- печатать запятую и пробел для каждого другого элемента;
~}
- конец цикла над элементами;
.
- вывести стоп в конце списка;
~%
- вывести символ новой строки.
Это сравнительно простой пример использования FORMAT
управляющих строк : можно делать довольно сложные вещи.
(На самом деле, конечно, CL - это CL, очевидно, можно без проблем добавить к нему более структурированный язык управления выводом, и я уверен, что люди это сделали. Итак, CL в некотором смысле прошел стадию: FORMAT
управляющие струны для некоторых являются просто окаменелым остатком).