Строки

  Строки, подобно символам, числам, спискам и другим простым типам, являются основным типом данных, в работе с которыми используются свои элементарные примитивные функции и предикаты. Кроме того, строки наследуют весь набор методов своего родительского типа true.

Буквы и строки

  Строку можно разделить на буквы (char). Буква также является типом данных. Его объекты в отличие от атомов, имя которых состоит из одного знака, изображаются в виде

  #\x

  В этой записи x является изображаемым данной записью буквой или словом в случае специальной буквы, обычно не имеющего печатного изображения. Например:

#\e ; маленькое e
#\T ; большое t
#\tab ; табуляция

  Значением буквы, как и у констант, является сама буква:

>#\e
#\e

  Является ли лисповский объект буквой, можно проверить предикатом (nil charp x).
  В строке, буквы записываются друг за другом, для ограничения которой с обеих сторон в качестве ограничителя используется знак ", например:

  "Это строка"
  "(2 + 3)"
  "\""
; строка, состоящая из одного ограничителя

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

>"Это строка"
"Это строка"
>"(2 + 3)"
"(2 + 3)"
>(nil list "abc" "def")
("abc" "def")
; список строк

  Функцией, проверяющей, имеет ли объект тип строки, является (nil stringp x), значением которой будет x, если x - это строка.

Работа со строками

  В работе со строками нужны функции по крайней мере для чтения элементов строки, изменения этих элементов и для сравнения двух строк.
  Произвольный элемент строки можно прочитать функцией elt:

  (строка elt n)

  Приведём пример:

>("Кот" elt 0) ; индексация начинается с 0
#\К

  Элемент строки можно изменить с помощью функции присваивания setelt, например:

>("Кот" setelt 0 #\Р)
"Рот"

  Строки можно сравнивать с помощью предиката =:

  (x = y)

  Этот предикат проверяет идентичность двух строк.

>("Кот" = "кот")
false
>("Кот" = "Кот")
"Кот"