Spec-Zone.ru › Elisp

Изменение регистра в 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API