Я бы не стал утверждать, что это идиоматично, но можно также повторить строку, используя функцию clojure cl-format , которая наследуется от общего lisp.Обычный шутник в свою очередь пересаживал его из Фортрана, который придумал эту работу в 50-х годах.
И вот мы в 2018 году ...
Пример:
user=> (cl-format nil "~v@{~a~:*~}" 5 "Bob")
"BobBobBobBobBob"
Строка формата работает следующим образом:
- первыйспецификатор формата
~5@{
, где пятерка извлекается из списка аргументов, поскольку перед @
стоит v
.~5@{
в свою очередь означает итерацию 5 раз с использованием всего списка аргументов (строка «Bob») в качестве итерируемого. - внутри фигурных скобок (фигурное выражение заканчивается
~}
), мы печатаем строку «Bob» с помощью ~a
, а затем «перемещаем указатель аргумента» на одну позицию назад, используя конструкцию ~:*
так что мы можем снова «потреблять» аргумент «Боб».
Вуаля, 5 повторений Боба.
Следует отметить, что cl-format
может либо вернуть созданную строку (если второй аргумент равен nil), вывести ее в текущий *out*
(если второй аргумент true
), либо вывестиэто писателю (если вторым аргументом является писатель).
Для получения дополнительной информации о синтаксисе строки формата вы можете обратиться к:
Форматированный вывод в символьные потоки
в общем спискессылка на язык и, возможно, на:
Исключение формата из lisp
, почему можно утверждать, что cl-format
- плохая идея.