Глава 18
Строки

 18.1 Доступ к буквам
 18.2 Сравнение строк
 18.3 Создание и манипулирование строками

Строка является специализированным вектором (или одномерным массивом), элементы которого — буквы.

X3J13 voted in March 1989 to eliminate the type string-char and to redefine the type string to be the union of one or more specialized vector types, the types of whose elements are subtypes of the type character.

Любая функция, определённая в данной главе, имя которой имеет префикс string, в качестве аргумента может принимать символ, при условии, что операция не модифицирует этот аргумент. При этом использоваться будет выводимое имя символа. Таким образом операции над последовательностями из букв не являются специализированными версиями обобщённых функций; обобщённые операции над последовательностями, описанные в главе 14 не принимают символы в качестве последовательности. Такая «неизящность» сделана в Common Lisp’е в целях прагматичности. Для достижения унификации функций, предлагается использовать функцию string применительно ко всем аргументам, тип которых не известен заранее.

Note that this remark, predating the design of the Common Lisp Object System, uses the term “generic” in a generic sense and not necessarily in the technical sense used by CLOS (see chapter 2).

Также, существует небольшая расхождение в именах строковых функций. Тогда как суффиксы equalp и eql были бы более подходящими, вместо них все же для исторической совместимости используются суффиксы equal и =, для указания, соответственно, регистронезависимого и регистрозависимого сравнения букв.

Любой Lisp’овый объект может быть проверен на принадлежность строковому типу с помощью предиката stringp.

Следует отметить, что строки, как и все вектора, могут иметь указатель заполнения (хотя такие строки необязательно простые). Строковые операции в основном взаимодействуют только с активной частью строки (перед указателем заполнения). Смотрите fill-pointer и связанные с ним функции.