LISP — операторы сравнения символов и строк

Опубликовано: 9 Сентября, 2022

Содержимое поля сравнивается с содержимым другого поля или константы с помощью операторов сравнения. Простыми словами, операторы сравнения используются для сравнения того, равны ли два или более разных значения или нет.

Операторы сравнения по характеру:

Символы не поддерживаются функциями числового сравнения и операторами, такими как < и >. Помимо этого, используются два набора функций в Common LISP. Первый набор чувствителен к регистру, тогда как второй не чувствителен к регистру или (без учета регистра).

Ниже приведены некоторые функции сравнения, которые можно использовать для определения эквивалентности двух символов.

Деликатный случай Без учета регистра Объяснение
СИМВОЛ= СИМВОЛ-РАВНО Проверяет, равны ли все значения операндов; если они есть, то условие истинно.
СИМВОЛ/= СИМВОЛ НЕ РАВНО Проверяет, все ли значения операндов различны или нет; если это не так, условие истинно.
СИМВОЛ< CHAR-LESSP Если символ 1 меньше символа 2, условие истинно; в противном случае условие ложно.
СИМВОЛ<= СИМВОЛ-НЕ-БОЛЬШОЙ Если какое-либо из значений левого символа меньше или равно значению следующего правого символа, условие истинно.
СИМВОЛ> CHAR-GREATERP Если символ1 больше, чем символ2, условие истинно; в противном случае оно ложно.
СИМВОЛ>= СИМВОЛ НЕ МЕНЬШЕ Если значение любого левого символа больше или равно значению его правого символа, условие истинно.

Пример 1: Сравнение с учетом регистра

Lisp




(write (CHAR= #a #A))
(terpri)
(write (CHAR> # #a))
(terpri)
(write (CHAR< #A #a))

Вывод: при запуске приведенного выше кода вывод выглядит следующим образом.

NIL
T
T

Пример 2: сравнение без учета регистра

Lisp




(write (CHAR-EQUAL #a #A))
(terpri)
(write (CHAR-EQUAL #a #))
(terpri)
(write (CHAR-LESSP #a # #c))
(terpri)
(write (CHAR-GREATERP #a # #c))

Вывод: при запуске приведенного выше кода вывод выглядит следующим образом.

T
NIL
T
NIL

Операторы сравнения в строке:

В Common Lisp строки — это векторы, представляющие собой одномерные массивы символов. За исключением символа двойных кавычек (") и управляющего символа (), каждый символ, поддерживаемый набором символов, может содержаться между двойными кавычками для формирования строки. Как и символ, строка также имеет два набора операторов сравнения, один из которых чувствителен к регистру, а другой не чувствителен к регистру.

Итак, чтобы проверить, равны ли две строки, можно использовать следующие функции сравнения.

Деликатный случай Без учета регистра Объяснение
STRING= STRING-EQUAL Проверяет, равны ли все значения операндов; если они есть, то условие истинно.
STRING/= СТРОКА НЕ РАВНО Проверяет, все ли значения операндов не равны; если они есть, то условие истинно.
STRING< БЕЗ СТРОКИ Если строка1 меньше строки2, условие истинно; в противном случае условие ложно.
STRING<= STRING-NOT-GREATERP Если значение любого из левых операндов меньше или равно значению следующего правого операнда, условие истинно.
STRING> STRING-GREATERP Если строка1 больше, чем строка2, условие истинно; в противном случае условие ложно.
STRING>= STRING-NOT-LESSP Если значение любого левого операнда больше или равно значению его правого операнда, условие истинно.

Пример 1. Сравнение с учетом регистра.

Lisp




(write (STRING= "gfg" "GFG"))
(terpri)
(write (STRING> "gfg" "GFG"))
(terpri)
(write (STRING< "gfg" "GFG"))

Вывод: при запуске приведенного выше кода вывод выглядит следующим образом.

NIL
0
NIL

Пример 2. Сравнение без учета регистра.

Lisp




(write (STRING-EQUAL "gfg" "GFG"))
(terpri)
(write (STRING-GREATERP "gfg" "GFG"))
(terpri)
(write (STRING-LESSP "gfg" "GFG"))

Вывод: операторы сравнения. При запуске приведенного выше кода вывод выглядит следующим образом.

T
NIL
NIL