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