LISP - Персонажи

В LISP символы представлены как объекты данных типа character.

Вы можете обозначить символьный объект, предшествующий # \ перед самим символом. Например, # \ a означает символ a.

Пробел и другие специальные символы могут быть обозначены предшествующим # \ перед именем символа. Например, # \ SPACE представляет собой пробел.

Следующий пример демонстрирует это -

пример

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

(write 'a)
(terpri)
(write #\a)
(terpri)
(write-char #\a)
(terpri)
(write-char 'a)

Когда вы выполняете код, он возвращает следующий результат -

A
#\a
a
*** - WRITE-CHAR: argument A is not a character

Специальные символы

Общий LISP позволяет использовать в вашем коде следующие специальные символы. Их называют полустандартными персонажами.

  • #\Backspace
  • #\Tab
  • #\Linefeed
  • #\Page
  • #\Return
  • #\Rubout

Функции сравнения символов

Функции и операторы числового сравнения, такие как <и>, не работают с символами. Common LISP предоставляет два других набора функций для сравнения символов в вашем коде.

Один набор чувствителен к регистру, а другой - без учета регистра.

В следующей таблице представлены функции -

Функции с учетом регистра Функции без учета регистра Описание
char = равный по символу Проверяет, равны ли значения всех операндов или нет, если да, то условие становится истинным.
char / = char-not-equal Проверяет, все ли значения операндов разные или нет, если значения не равны, условие становится истинным.
char < безголовый Проверяет, монотонно ли уменьшаются значения операндов.
символ> Char-Morep Проверяет, монотонно ли увеличиваются значения операндов.
символ <= char-not-greatp Проверяет, больше ли значение любого левого операнда или равно значению следующего правого операнда, если да, то условие становится истинным.
символ> = char-not-lessp Проверяет, меньше ли значение любого левого операнда или равно значению его правого операнда, если да, то условие становится истинным.

пример

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

; case-sensitive comparison
(write (char= #\a #\b))
(terpri)
(write (char= #\a #\a))
(terpri)
(write (char= #\a #\A))
(terpri)
   
;case-insensitive comparision
(write (char-equal #\a #\A))
(terpri)
(write (char-equal #\a #\b))
(terpri)
(write (char-lessp #\a #\b #\c))
(terpri)
(write (char-greaterp #\a #\b #\c))

Когда вы выполняете код, он возвращает следующий результат -

NIL
T
NIL
T
NIL
T
NIL