LISP - ciągi

Łańcuchy w Common Lisp to wektory, tj. Jednowymiarowa tablica znaków.

Literały łańcuchowe są ujęte w podwójne cudzysłowy. Każdy znak obsługiwany przez zestaw znaków może zostać ujęty w cudzysłów, aby utworzyć ciąg, z wyjątkiem znaku podwójnego cudzysłowu (") i znaku zmiany znaczenia (\). Można je jednak uwzględnić, poprzedzając je ukośnikiem odwrotnym (\).

Przykład

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

(write-line "Hello World")
(write-line "Welcome to Tutorials Point")

;escaping the double quote character
(write-line "Welcome to \"Tutorials Point\"")

Po wykonaniu kodu zwraca następujący wynik -

Hello World
Welcome to Tutorials Point
Welcome to "Tutorials Point"

Funkcje porównujące ciągi

Liczbowe funkcje i operatory porównania, takie jak <i>, nie działają na łańcuchach. Common LISP udostępnia dwa inne zestawy funkcji do porównywania ciągów 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
string = ciąg równy Sprawdza, czy wszystkie wartości operandów są równe, czy nie. Jeśli tak, warunek staje się prawdziwy.
ciąg / = ciąg nie równy Sprawdza, czy wartości argumentów są różne, czy nie, jeśli wartości nie są równe, warunek staje się prawdziwy.
string < string-lessp Sprawdza, czy wartości operandów maleją monotonicznie.
ciąg> string-Greaterp Sprawdza, czy wartości operandów rosną monotonicznie.
ciąg <= string-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.
ciąg> = string-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 (string= "this is test" "This is test"))
(terpri)
(write (string> "this is test" "This is test"))
(terpri)
(write (string< "this is test" "This is test"))
(terpri)

;case-insensitive comparision
(write (string-equal "this is test" "This is test"))
(terpri)
(write (string-greaterp "this is test" "This is test"))
(terpri)
(write (string-lessp "this is test" "This is test"))
(terpri)

;checking non-equal
(write (string/= "this is test" "this is Test"))
(terpri)
(write (string-not-equal "this is test" "This is test"))
(terpri)
(write (string/= "lisp" "lisping"))
(terpri)
(write (string/= "decent" "decency"))

Po wykonaniu kodu zwraca następujący wynik -

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

Funkcje kontrolujące wielkość liter

W poniższej tabeli opisano funkcje kontrolujące sprawy -

Sr.No. Opis funkcji
1

string-upcase

Konwertuje ciąg na duże litery

2

string-downcase

Konwertuje ciąg na małe litery

3

string-capitalize

Zamienia każde słowo w ciągu na wielką literę

Przykład

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

(write-line (string-upcase "a big hello from tutorials point"))
(write-line (string-capitalize "a big hello from tutorials point"))

Po wykonaniu kodu zwraca następujący wynik -

A BIG HELLO FROM TUTORIALS POINT
A Big Hello From Tutorials Point

Przycinanie sznurków

W poniższej tabeli opisano funkcje przycinania sznurka -

Sr.No. Opis funkcji
1

string-trim

Pobiera ciąg znaków jako pierwszy argument i ciąg znaków jako drugi argument i zwraca podłańcuch, w którym wszystkie znaki znajdujące się w pierwszym argumencie są usuwane z ciągu argumentu.

2

String-left-trim

Przyjmuje ciąg znaków jako pierwszy argument i ciąg znaków jako drugi argument i zwraca podłańcuch, w którym wszystkie znaki znajdujące się w pierwszym argumencie są usuwane z początku ciągu argumentu.

3

String-right-trim

Pobiera znak (i) łańcucha jako pierwszy argument i ciąg jako drugi argument i zwraca podłańcuch, w którym wszystkie znaki znajdujące się w pierwszym argumencie są usuwane z końca ciągu argumentu.

Przykład

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

(write-line (string-trim " " "   a big hello from tutorials point   "))
(write-line (string-left-trim " " "   a big hello from tutorials point   "))
(write-line (string-right-trim " " "   a big hello from tutorials point   "))
(write-line (string-trim " a" "   a big hello from tutorials point   "))

Po wykonaniu kodu zwraca następujący wynik -

a big hello from tutorials point
a big hello from tutorials point   
   a big hello from tutorials point
big hello from tutorials point

Inne funkcje ciągów

Łańcuchy w LISP-ie to tablice, a więc także sekwencje. Omówimy te typy danych w nadchodzących samouczkach. Wszystkie funkcje, które mają zastosowanie do tablic i sekwencji, mają również zastosowanie do łańcuchów. Jednak niektóre często używane funkcje pokażemy na różnych przykładach.

Obliczanie długości

Plik length funkcja oblicza długość łańcucha.

Wyodrębnianie podciągu

Plik subseq funkcja zwraca podłańcuch (ponieważ ciąg jest również sekwencją) rozpoczynający się od określonego indeksu i kontynuowany do określonego indeksu końcowego lub końca łańcucha.

Dostęp do znaku w ciągu

Plik char Funkcja umożliwia dostęp do poszczególnych znaków ciągu.

Example

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

(write (length "Hello World"))
(terpri)
(write-line (subseq "Hello World" 6))
(write (char "Hello World" 6))

Po wykonaniu kodu zwraca następujący wynik -

11
World
#\W

Sortowanie i łączenie ciągów

Plik sortfunkcja umożliwia sortowanie łańcucha. Pobiera sekwencję (wektor lub łańcuch) i predykat dwuargumentowy i zwraca posortowaną wersję sekwencji.

Plik merge funkcja przyjmuje dwie sekwencje i predykat i zwraca sekwencję utworzoną przez połączenie dwóch sekwencji, zgodnie z predykatem.

Example

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

;sorting the strings
(write (sort (vector "Amal" "Akbar" "Anthony") #'string<))
(terpri)

;merging the strings
(write (merge 'vector (vector "Rishi" "Zara" "Priyanka") 
   (vector "Anju" "Anuj" "Avni") #'string<))

Po wykonaniu kodu zwraca następujący wynik -

#("Akbar" "Amal" "Anthony")
#("Anju" "Anuj" "Avni" "Rishi" "Zara" "Priyanka")

Odwracanie ciągu

Plik reverse funkcja odwraca ciąg.

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

(write-line (reverse "Are we not drawn onward, we few, drawn onward to new era"))

Po wykonaniu kodu zwraca następujący wynik -

are wen ot drawno nward ,wef ew ,drawno nward ton ew erA

Łączenie ciągów

Funkcja concatenate łączy dwa ciągi. To jest ogólna funkcja sekwencji i musisz podać typ wyniku jako pierwszy argument.

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

(write-line (concatenate 'string "Are we not drawn onward, " "we few, drawn onward to new era"))

Po wykonaniu kodu zwraca następujący wynik -

Are we not drawn onward, we few, drawn onward to new era