13.2 Предикаты для букв

Предикат characterp используется для определения, является ли Lisp’овый объект буквой.

[Функция] standard-char-p char

Аргумент char должен быть буквой. standard-char-p истинен, если аргумент является «стандартной буквой», то есть объект принадлежит типу standard-char.


[Функция] graphic-char-p char

Аргумент char должен быть буквой. graphic-char-p истинен, если аргумент является «графическим» (выводимым) символом, или ложен, если аргумент является «неграфическим» (форматирующим или управляющим) символом. Графические символы имеют стандартное текстовое представление в качестве одного знака, такого как например A или * или =. По соглашению, символы пробела рассматриваются как графические. Все стандартные символы за исключением #\Newline являются графическими. Не совсем стандартные символы #\Backspace, #\Tab, #\Rubout, #\Linefeed, #\Return и #\Page графическими не являются.


[Функция] alpha-char-p char

Аргумент char должен быть буквой. alpha-char-p истинен, если аргумент являются алфавитным символом, иначе предикат ложен.

Если символ является алфавитным, тогда он является графическим.

Из стандартных символов (как определено с помощью standard-char-p), буквы c A по Z и с a по z являются алфавитными.


[Функция] upper-case-p char
[Функция] lower-case-p char
[Функция] both-case-p char

Аргумент char должен быть буквой.

upper-case-p истинен, если аргумент является символом в верхнем регистре, иначе ложен.

lower-case-p истинен, если аргумент является символом в нижнем регистре, иначе ложен.

both-case-p истинен, если аргумент является символом в верхнем регистре, и для этого символа существует аналогичный в нижнем регистре (это может быть установлено с помощью char-downcase), или если аргумент является символом в нижнем регистре, и для этого символа существует аналогичный в верхнем регистре (это может быть установлено с помощью char-upcase).

Из стандартных символов (как определено с помощью standard-char-p), буквы c A по Z имеют верхний регистр и буквы с a по z нижний.


[Функция] digit-char-p char &optional (radix 10)

Аргумент char должен быть буквой, и radix неотрицательным целым числом. Если char не является цифрой для указанной в radix системы счисления, тогда digit-char-p ложен, иначе предикат возвращает значение данного символа в этой системе счисления.

Цифры принадлежат графическим символам.

Из стандартных символов (как определено с помощью standard-char-p), символы с 0 по 9, с A по Z и с a по z являются цифровыми. Веса c 0 по 9 совпадают с числами с 0 по 9, и с A по Z (а также с a по z) совпадают с числами с 10 по 35. digit-char-p возвращает вес одной их этих цифр тогда и только тогда, когда их вес строго меньше чем radix. Таким образом, например, цифры для шестнадцатеричной системы счисления будут такими

0 1 2 3 4 5 6 7 8 9 A B C D E F

Пример использования digit-char-p:

(defun convert-string-to-integer (str &optional (radix 10))
  "Принимает строку и опционально систему счисления, возвращает целое число."
  (do ((j 0 (+ j 1))
       (n 0 (+ (* n radix)
               (or (digit-char-p (char str j) radix)
                   (error "Bad radix-~D digit: ~C"
                          radix
                          (char str j))))))
      ((= j (length str)) n)))


[Функция] alphanumericp char

Аргумент char должен быть буквой. Предикат alphanumericp истинен, если char является буквой или цифрой. Определение:

(alphanumericp x)
    (or (alpha-char-p x) (not (null (digit-char-p x))))

Таким образом алфавитно-цифровой символ обязательно является графическим (в соответствии с предикатом graphic-char-p).

Из стандартных символов (в соответствие с предикатом standard-char-p), символы с 0 по 9, с A по Z, с a по z являются алфавитно-цифровыми.


[Функция] char= character &rest more-characters
[Функция] char/= character &rest more-characters
[Функция] char< character &rest more-characters
[Функция] char> character &rest more-characters
[Функция] char<= character &rest more-characters
[Функция] char>= character &rest more-characters

Все аргументы должны быть строковыми символами. Данный функции сравнивают символы методом зависящим от реализации.

Порядок расположения букв гарантированно удовлетворяет следующим правилам:

Порядок следования символов необязательно совпадает с порядком следования их кодов, полученных из функции char-int.

Порядок следование символов не является неразрывным. Таким образом выражение (char<= #\a x #\z) нельзя использовать для проверки является ли x символом в нижнем регистре. Для этого предназначен предикат lower-case-p.

(char= #\d #\d) истина.
(char/= #\d #\d) ложь.
(char= #\d #\x) ложь.
(char/= #\d #\x) истина.
(char= #\d #\D) ложь.
(char/= #\d #\D) истина.
(char= #\d #\d #\d #\d) истина.
(char/= #\d #\d #\d #\d) ложь.
(char= #\d #\d #\x #\d) ложь.
(char/= #\d #\d #\x #\d) ложь.
(char= #\d #\y #\x #\c) ложь.
(char/= #\d #\y #\x #\c) истина.
(char= #\d #\c #\d) ложь.
(char/= #\d #\c #\d) ложь.
(char< #\d #\x) истина.
(char<= #\d #\x) истина.
(char< #\d #\d) ложь.
(char<= #\d #\d) истина.
(char< #\a #\e #\y #\z) истина.
(char<= #\a #\e #\y #\z) истина.
(char< #\a #\e #\e #\y) ложь.
(char<= #\a #\e #\e #\y) истина.
(char> #\e #\d) истина.
(char>= #\e #\d) истина.
(char> #\d #\c #\b #\a) истина.
(char>= #\d #\c #\b #\a) истина.
(char> #\d #\d #\c #\a) ложь.
(char>= #\d #\d #\c #\a) истина.
(char> #\e #\d #\b #\c #\a) ложь.
(char>= #\e #\d #\b #\c #\a) ложь.
(char> #\z #\A) может быть истиной или ложью.
(char> #\Z #\a) может быть истиной или ложью.

Если и (char= c1 c2) является истиной, то (eq c1 c2) истиной может и не являться. eq сравнивает буквы не как символы, а как объекты с различием в свойствах, которое зависит от конкретной реализации. (Конечно, если (eq c1 c2) истинно, то (char= c1 c2) также будет истинно.) Однако, eql и equal сравнивают буквы также как и char=.


[Функция] char-equal character &rest more-characters
[Функция] char-not-equal character &rest more-characters
[Функция] char-lessp character &rest more-characters
[Функция] char-greaterp character &rest more-characters
[Функция] char-not-greaterp character &rest more-characters
[Функция] char-not-lessp character &rest more-characters

Для стандартных символов порядок между ними такой, что выполняются равенства A=a, B=b и так до Z=z, а также выполняется одно из двух неравенств 9<A или Z<0.

(char-equal #\A #\a) истина.
(char= #\A #\a) ложь.
(char-equal #\A #\Control-A) истина.