Изменение регистра в Lisp
Функции изменения регистра символов меняют регистр отдельных символов или содержимого строк. Обычно функции преобразуют только буквенные символы (буквы от ‘A’ до ‘Z’ и от ‘a’ до ‘z’, а также буквы, не входящие в ASCII); остальные символы не изменяются. Вы можете задать другое соответствие при преобразовании регистра, указав таблицу регистра (см. Таблица регистра).
Эти функции не изменяют строки, переданные им в качестве аргументов.
В приведённых ниже примерах используются символы ‘X’ и ‘x’, коды ASCII которых равны 88 и 120 соответственно.
- Функция: downcase string-or-char
-
Эта функция преобразует string-or-char, которым должна быть строка или символ, в нижний регистр.
Если string-or-char — строка, эта функция возвращает новую строку, в которой каждая заглавная буква аргумента преобразована в строчную. Если string-or-char — символ, функция возвращает соответствующий символ в нижнем регистре (целое число); если исходный символ уже в нижнем регистре или не является буквой, возвращаемое значение совпадает с исходным символом.
(downcase "The cat in the hat") ⇒ "the cat in the hat" (downcase ?X) ⇒ 120
- Функция: upcase string-or-char
-
Эта функция преобразует string-or-char, которым должна быть строка или символ, в верхний регистр.
Если string-or-char — строка, эта функция возвращает новую строку, в которой каждая строчная буква аргумента преобразована в заглавную. Если string-or-char — символ, функция возвращает соответствующий символ в верхнем регистре (целое число); если исходный символ уже в верхнем регистре или не является буквой, возвращаемое значение совпадает с исходным символом.
(upcase "The cat in the hat") ⇒ "THE CAT IN THE HAT" (upcase ?x) ⇒ 88
- Функция: capitalize string-or-char
-
Эта функция преобразует строки или символы, делая первые буквы слов заглавными. Если string-or-char — строка, функция возвращает новую строку, содержимое которой является копией string-or-char с заглавными первыми буквами каждого слова. Это означает, что первый символ каждого слова преобразуется в верхний регистр, а остальные — в нижний.
Словом считается любая последовательность соседних символов, которым в текущей таблице синтаксиса назначен класс синтаксиса составляющих слова (см. Таблица классов синтаксиса); если
case-symbols-as-wordsне равенnil, символы с классом синтаксиса составляющих символов также считаются составляющими слова.Если string-or-char — символ, эта функция делает то же, что и
upcase.(capitalize "The cat in the hat") ⇒ "The Cat In The Hat"(capitalize "THE 77TH-HATTED CAT") ⇒ "The 77th-Hatted Cat"(capitalize ?x) ⇒ 88
- Функция: upcase-initials string-or-char
-
Если string-or-char — строка, эта функция преобразует первые буквы слов в string-or-char в верхний регистр, не изменяя остальные буквы. Она возвращает новую строку, содержимое которой является копией string-or-char, где первая буква каждого слова преобразована в верхний регистр.
Определение слова для этой функции совпадает с описанным выше для
capitalize, аcase-symbols-as-wordsтак же влияет на символы, составляющие слова.Если аргумент
upcase-initials— символ,upcase-initialsвозвращает тот же результат, что иupcase.(upcase-initials "The CAT in the hAt") ⇒ "The CAT In The HAt"
Обратите внимание, что преобразование регистра не является взаимно однозначным отображением кодовых точек, и длина результата может отличаться от длины аргумента. Кроме того, поскольку при передаче символа тип возвращаемого значения принудительно становится символьным, функции не могут выполнить корректную подстановку, и результат может отличаться от результата для однострочной строки. Например:
(upcase "fi") ; note: single character, ligature "fi"
⇒ "FI"
(upcase ?fi)
⇒ 64257 ; i.e. ?fi
Чтобы избежать этого, перед передачей символа одной из функций изменения регистра его необходимо преобразовать в строку с помощью функции string. Разумеется, нельзя делать никаких предположений о длине результата.
Для других символов также могут действовать особые правила преобразования регистра. Для всех них стандарт Unicode определяет свойства символов, отличных от nil: special-uppercase, special-lowercase или special-titlecase (см. Свойства символов). Эти свойства задают особые правила преобразования регистра, которые имеют приоритет над текущей таблицей регистра (см. Таблица регистра).
См. Сравнение символов и строк: в этом разделе описаны функции сравнения строк; некоторые из них игнорируют различия в регистре или позволяют при необходимости их игнорировать.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Case-Conversion.html