LISP — операторы сравнения символов и строк
Содержимое поля сравнивается с содержимым другого поля или константы с помощью операторов сравнения. Простыми словами, операторы сравнения используются для сравнения того, равны ли два или более разных значения или нет.
Операторы сравнения по характеру:
Символы не поддерживаются функциями числового сравнения и операторами, такими как < и >. Помимо этого, используются два набора функций в 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