Формат (Common Lisp) - Format (Common Lisp)

Формат функция в Common Lisp который может создавать форматированный текст с использованием строки формата, подобной строка формата printf. Он предоставляет больше функциональных возможностей, чем printf, позволяя пользователю выводить числа на английском языке, применять определенные спецификаторы формата только при определенных условиях, выполнять итерацию по структурам данных и выводить данные в табличном формате. Функционально это происходит из Массачусетского технологического института. Лисп-машина Лисп, где он был основан на Мультики ioa_[нужна цитата ].

Пример

Пример C printf звонок следующий:

 printf("Цвет% s, число1% d, число2% 05d, шестнадцатеричное% x, число с плавающей запятой% 5.2f, значение без знака% u. п",             "красный", 123456, 89, 255, 3.14, 250);

Используя Common Lisp, это эквивалентно:

 (формат т "Color ~ A, number1 ~ D, number2 ~ 5, '0D, hex ~ X, float ~ 5,2F, беззнаковое значение ~ D. ~%"             "красный" 123456 89 255 3.14 250) ;; печатает: красный цвет, число1 123456, число2 00089, шестнадцатеричный FF, число с плавающей запятой 3,14, значение без знака 250.

Другой пример - напечатать каждый элемент списка, разделенный запятыми, что можно сделать с помощью ~{, ~^ и ~} директивы:[1]

 (позволять ((продукты '(яйца хлеб масло сливочное морковь)))   (формат т "~ {~ A ~ ^, ~}. ~%" продукты)         ; Печать в верхнем регистре   (формат т "~: (~ {~ A ~ ^, ~} ~). ~%" продукты))   ; Капитализирует выпуск ;; принты: ЯЙЦА, ХЛЕБ, МАСЛО, МОРКОВЬ. ;; принты: яйца, хлеб, масло, морковь.

Обратите внимание, что не только список значений повторяется напрямую формат, но запятые печатаются правильно между предметы, а не после их. Еще более сложный пример - распечатать список, используя обычную английскую формулировку:

(позволять ((шаблон "Счастливыми победителями стали: ~ # [none ~; ~ S ~; ~ S и ~ S ~           ~:; ~ @ {~ # [~; и ~] ~ S ~ ^, ~} ~] ".))  (формат ноль шаблон)  ;; ⇒ «Счастливых победителей: нет».  (формат ноль шаблон 'фу)  ;; ⇒ «Счастливыми победителями стали: FOO.  (формат ноль шаблон 'фу 'бар)  ;; ⇒ «Счастливыми победителями стали: FOO и BAR».  (формат ноль шаблон 'фу 'бар 'баз)  ;; ⇒ «Счастливыми победителями стали: FOO, BAR, BAZ».  (формат ноль шаблон 'фу 'бар 'баз 'quux)  ;; ⇒ «Счастливыми победителями стали: FOO, BAR, BAZ, QUUX».  )

Пока формат несколько печально известен своей тенденцией становиться непрозрачным и трудным для чтения, он обеспечивает замечательно краткий, но мощный синтаксис для специализированных и общих потребностей.[1]

Доступна сводная таблица Common Lisp FORMAT.[2]

Рекомендации

Книги