LISP - струны
Строки в Common Lisp - это векторы, то есть одномерный массив символов.
Строковые литералы заключаются в двойные кавычки. Любой символ, поддерживаемый набором символов, может быть заключен в двойные кавычки для создания строки, за исключением символа двойной кавычки (") и escape-символа (\). Однако вы можете включить их, экранировав их обратной косой чертой (\).
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(write-line "Hello World")
(write-line "Welcome to Tutorials Point")
;escaping the double quote character
(write-line "Welcome to \"Tutorials Point\"")
Когда вы выполняете код, он возвращает следующий результат -
Hello World
Welcome to Tutorials Point
Welcome to "Tutorials Point"
Функции сравнения строк
Функции и операторы числового сравнения, например <и>, не работают со строками. Common LISP предоставляет два других набора функций для сравнения строк в вашем коде. Один набор чувствителен к регистру, а другой - без учета регистра.
В следующей таблице представлены функции -
Функции с учетом регистра | Функции без учета регистра | Описание |
---|---|---|
строка = | равный по строке | Проверяет, равны ли значения всех операндов или нет, если да, то условие становится истинным. |
строка / = | строка-не-равно | Проверяет, все ли значения операндов разные или нет, если значения не равны, тогда условие становится истинным. |
строка < | без струн | Проверяет, монотонно ли уменьшаются значения операндов. |
строка> | струна-большая | Проверяет, монотонно ли увеличиваются значения операндов. |
строка <= | строка-не-большая | Проверяет, больше ли значение любого левого операнда или равно значению следующего правого операнда, если да, то условие становится истинным. |
строка> = | строка не менее | Проверяет, меньше ли значение любого левого операнда или равно значению его правого операнда, если да, то условие становится истинным. |
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
; 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"))
Когда вы выполняете код, он возвращает следующий результат -
NIL
0
NIL
T
NIL
NIL
8
NIL
4
5
Функции управления делами
В следующей таблице описаны функции управления делами -
Sr. No. | Описание функции |
---|---|
1 | string-upcase Преобразует строку в верхний регистр |
2 | string-downcase Преобразует строку в нижний регистр |
3 | string-capitalize Делает каждое слово в строке заглавным |
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(write-line (string-upcase "a big hello from tutorials point"))
(write-line (string-capitalize "a big hello from tutorials point"))
Когда вы выполняете код, он возвращает следующий результат -
A BIG HELLO FROM TUTORIALS POINT
A Big Hello From Tutorials Point
Обрезка струн
В следующей таблице описаны функции обрезки строки -
Sr. No. | Описание функции |
---|---|
1 | string-trim Он принимает строку символов в качестве первого аргумента и строку в качестве второго аргумента и возвращает подстроку, в которой все символы, содержащиеся в первом аргументе, удаляются из строки аргумента. |
2 | String-left-trim Он принимает строку символов в качестве первого аргумента и строку в качестве второго аргумента и возвращает подстроку, в которой все символы, содержащиеся в первом аргументе, удалены из начала строки аргумента. |
3 | String-right-trim Он принимает строковые символы в качестве первого аргумента и строку в качестве второго аргумента и возвращает подстроку, в которой все символы, входящие в первый аргумент, удаляются из конца строки аргумента. |
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(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 "))
Когда вы выполняете код, он возвращает следующий результат -
a big hello from tutorials point
a big hello from tutorials point
a big hello from tutorials point
big hello from tutorials point
Другие строковые функции
Строки в LISP - это массивы, а значит, и последовательности. Мы рассмотрим эти типы данных в следующих руководствах. Все функции, применимые к массивам и последовательностям, также применимы к строкам. Однако мы продемонстрируем некоторые часто используемые функции на различных примерах.
Расчет длины
В length функция вычисляет длину строки.
Извлечение подстроки
В subseq функция возвращает подстроку (поскольку строка также является последовательностью), начиная с определенного индекса и продолжая до определенного конечного индекса или конца строки.
Доступ к символу в строке
В char функция позволяет получить доступ к отдельным символам строки.
Example
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(write (length "Hello World"))
(terpri)
(write-line (subseq "Hello World" 6))
(write (char "Hello World" 6))
Когда вы выполняете код, он возвращает следующий результат -
11
World
#\W
Сортировка и объединение строк
В sortфункция позволяет сортировать строку. Он принимает последовательность (вектор или строку) и предикат с двумя аргументами и возвращает отсортированную версию последовательности.
В merge Функция принимает две последовательности и предикат и возвращает последовательность, полученную путем слияния двух последовательностей в соответствии с предикатом.
Example
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
;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<))
Когда вы выполняете код, он возвращает следующий результат -
#("Akbar" "Amal" "Anthony")
#("Anju" "Anuj" "Avni" "Rishi" "Zara" "Priyanka")
Переворачивание строки
В reverse функция переворачивает строку.
Например, создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(write-line (reverse "Are we not drawn onward, we few, drawn onward to new era"))
Когда вы выполняете код, он возвращает следующий результат -
are wen ot drawno nward ,wef ew ,drawno nward ton ew erA
Объединение строк
Функция конкатенации объединяет две строки. Это универсальная функция последовательности, и вы должны указать тип результата в качестве первого аргумента.
Например, создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(write-line (concatenate 'string "Are we not drawn onward, " "we few, drawn onward to new era"))
Когда вы выполняете код, он возвращает следующий результат -
Are we not drawn onward, we few, drawn onward to new era