Большинство необходимых операций над строками могут быть выполнены с помощью общих функций для последовательностей, описанных в главе 14. Следующие функций производят дополнительные операции специфичные для строк.
Функция возвращает простую строку длинной size, каждый из символов которой равен аргументу :initial-element. Если аргумент :initial-element не задан, тогда строка инициализируется в зависимости от реализации.
Аргумент :element-type задаёт тип элементов строки. Строка создаётся с наиболее специализированным типов элементов, позволяющем хранить элементы указанного типа. Если :element-type опущен, то по-молчанию используется тип character.
[Функция]
string-trim character-bag stringstring-trim возвращает подстроку от string, с удалёнными в начале и в конце символами из character-bag. Функция string-left-trim похожа на предыдущую, но удаляет символы только в начале. string-right-trim удаляет символы только в конце. Аргумент character-bag может быть любой последовательностью, содержащей буквы. Например:
В зависимости от реализации, в случае, если строка не претерпевала модификаций, может возвратиться сама строка или её копия.
X3J13 voted in June 1989 to clarify string coercion (see string).
[Функция]
string-upcase string &key :start :endstring-upcase возвращает сроку, в которой все символы в нижнем регистре изменены на соответствующие в верхнем. А точнее, все символы строки получаются применением к соответствующим символам входной строки функции char-upcase.
string-downcase похожа на предыдущую функцию за исключением того, что символы в верхнем регистре заменяются на соответствующие символы в нижнем (используя char-downcase).
Именованные аргументы :start и :end указывают на то, какая часть строки будет обрабатываться. Однако, результат всегда той же длины, что и входная строка.
Аргумент деструктивно не преобразуется. Однако, если символов для перевода регистра в аргументе не оказалось, то на усмотрение реализации результат может быть входной строкой или её копией. Например:
string-capitalize возвращает копию строки string, в которой первые буквы всех слов возводятся в верхний регистр, а остальные буквы в нижний. Слова состоят из алфавитно-цифровых символов, разделённых друг от друга неалфавитно-цифровыми символами. Например:
X3J13 voted in June 1989 to clarify string coercion (see string).
[Функция]
nstring-upcase string &key :start :endЭти три функции похожи на string-upcase, string-downcase и string-capitalize, но в отличие от последних деструктивно модифицируют аргумент string изменяя где надо регистр символов.
Именованные параметры :start :end задают обрабатываемую подстроку. Результатом является аргумент string.
Большинство строковых функций применяют string к своим аргументам. Если x является строкой, то они и возвращается. Если x является символом, то возвращается его выводимое имя.
В любой другой ситуации, сигнализируется ошибка.
Для преобразования последовательности символов в строку используйте coerce. (Следует отметить, что (coerce x ’string) не сработает, если x является Lisp’овым символом. И наоборот, string не будет конвертировать список или другую последовательность в строку.)
Для получения строкового отображения для числа или любого другого Lisp’ового объекта используйте prin1-to-string, princ-to-string или format.
X3J13 voted in June 1989 to specify that the following functions perform coercion on their string arguments identical to that performed by the function string.
string= | string-equal | string-trim |
string< | string-lessp | string-left-trim |
string> | string-greaterp | string-right-trim |
string<= | string-not-greaterp | string-upcase |
string>= | string-not-lessp | string-downcase |
string/= | string-not-equal | string-capitalize |
Note that nstring-upcase, nstring-downcase, and nstring-capitalize are absent from this list; because they modify destructively, the argument must be a string.
As part of the same vote X3J13 specified that string may perform additional implementation-dependent coercions but the returned value must be of type string. Only when no coercion is defined, whether standard or implementation-dependent, is string required to signal an error, in which case the error condition must be of type type-error.