LISP - Postacie

W LISP znaki są reprezentowane jako obiekty danych typu character.

Możesz oznaczyć obiekt znakowy poprzedzający # \ przed samym znakiem. Na przykład # \ a oznacza znak a.

Spację i inne znaki specjalne można oznaczyć, poprzedzając # \ przed nazwą znaku. Na przykład # \ SPACJA reprezentuje znak spacji.

Poniższy przykład demonstruje to -

Przykład

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

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

Po wykonaniu kodu zwraca następujący wynik -

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

Znaki specjalne

Common LISP pozwala na używanie w kodzie następujących znaków specjalnych. Nazywa się je postaciami półstandardowymi.

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

Funkcje porównywania znaków

Liczbowe funkcje i operatory porównania, takie jak <i>, nie działają na znakach. Common LISP udostępnia dwa inne zestawy funkcji do porównywania znaków w kodzie.

W jednym zestawie rozróżniana jest wielkość liter, a w drugim wielkość liter.

Poniższa tabela przedstawia funkcje -

Funkcje uwzględniające wielkość liter Funkcje bez rozróżniania wielkości liter Opis
char = znak równości Sprawdza, czy wszystkie wartości operandów są równe, czy nie. Jeśli tak, warunek staje się prawdziwy.
char / = char-not-equal Sprawdza, czy wartości argumentów są różne, czy nie, jeśli wartości nie są równe, warunek staje się prawdziwy.
char < char-lessp Sprawdza, czy wartości operandów maleją monotonicznie.
char> char-Greaterp Sprawdza, czy wartości operandów rosną monotonicznie.
char <= char-not-Greaterp Sprawdza, czy wartość dowolnego lewego operandu jest większa lub równa wartości następnego prawego operandu, jeśli tak, warunek staje się prawdziwy.
char> = char-not-lessp Sprawdza, czy wartość dowolnego lewego operandu jest mniejsza lub równa wartości jego prawego operandu, jeśli tak, warunek staje się prawdziwy.

Przykład

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

; 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))

Po wykonaniu kodu zwraca następujący wynik -

NIL
T
NIL
T
NIL
T
NIL