LISP - Chuỗi

Chuỗi trong Common Lisp là vectơ, tức là mảng một chiều các ký tự.

Các ký tự chuỗi được đặt trong dấu ngoặc kép. Bất kỳ ký tự nào được hỗ trợ bởi bộ ký tự đều có thể được đặt trong dấu ngoặc kép để tạo thành chuỗi, ngoại trừ ký tự dấu ngoặc kép (") và ký tự thoát (\). Tuy nhiên, bạn có thể bao gồm các ký tự này bằng cách thoát chúng bằng dấu gạch chéo ngược (\).

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

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

Khi bạn thực thi mã, nó trả về kết quả sau:

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

Các chức năng so sánh chuỗi

Các hàm và toán tử so sánh số, như <và> không hoạt động trên chuỗi. Common LISP cung cấp hai bộ hàm khác để so sánh các chuỗi trong mã của bạn. Một bộ phân biệt chữ hoa chữ thường và tập hợp kia không phân biệt chữ hoa chữ thường.

Bảng sau cung cấp các chức năng:

Các chức năng phân biệt chữ hoa chữ thường Các chức năng phân biệt chữ hoa chữ thường Sự miêu tả
string = chuỗi bằng Kiểm tra xem các giá trị của các toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true.
string / = chuỗi-không-bằng Kiểm tra xem giá trị của các toán hạng có khác nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true.
chuỗi < string-lessp Kiểm tra xem giá trị của các toán hạng có giảm đơn điệu hay không.
chuỗi> string-greatp Kiểm tra xem giá trị của các toán hạng có tăng đơn điệu hay không.
chuỗi <= string-not-greatp Kiểm tra xem giá trị của bất kỳ toán hạng bên trái nào lớn hơn hoặc bằng giá trị của toán hạng bên phải tiếp theo hay không, nếu có thì điều kiện trở thành true.
chuỗi> = string-not-lessp Kiểm tra xem giá trị của bất kỳ toán hạng bên trái nào nhỏ hơn hoặc bằng giá trị của toán hạng bên phải của nó hay không, nếu có thì điều kiện trở thành true.

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

Khi bạn thực thi mã, nó trả về kết quả sau:

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

Chức năng kiểm soát trường hợp

Bảng sau đây mô tả các chức năng điều khiển trường hợp:

Sr.No. Mô tả chức năng
1

string-upcase

Chuyển đổi chuỗi thành chữ hoa

2

string-downcase

Chuyển đổi chuỗi thành chữ thường

3

string-capitalize

Viết hoa từng từ trong chuỗi

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

Khi bạn thực thi mã, nó trả về kết quả sau:

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

Cắt tỉa chuỗi

Bảng sau đây mô tả các hàm cắt xén chuỗi:

Sr.No. Mô tả chức năng
1

string-trim

Nó nhận một chuỗi ký tự làm đối số đầu tiên và một chuỗi làm đối số thứ hai và trả về một chuỗi con trong đó tất cả các ký tự có trong đối số đầu tiên đều bị xóa khỏi chuỗi đối số.

2

String-left-trim

Nó nhận một chuỗi ký tự làm đối số đầu tiên và một chuỗi làm đối số thứ hai và trả về một chuỗi con trong đó tất cả các ký tự có trong đối số đầu tiên bị xóa khỏi đầu chuỗi đối số.

3

String-right-trim

Nó nhận (các) ký tự chuỗi làm đối số đầu tiên và một chuỗi làm đối số thứ hai và trả về một chuỗi con trong đó tất cả các ký tự có trong đối số đầu tiên bị xóa khỏi cuối chuỗi đối số.

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(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   "))

Khi bạn thực thi mã, nó trả về kết quả sau:

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

Các hàm chuỗi khác

Chuỗi trong LISP là mảng và do đó cũng là chuỗi. Chúng tôi sẽ đề cập đến các loại dữ liệu này trong các hướng dẫn sắp tới. Tất cả các hàm có thể áp dụng cho mảng và chuỗi cũng áp dụng cho chuỗi. Tuy nhiên, chúng tôi sẽ trình bày một số hàm thường được sử dụng bằng các ví dụ khác nhau.

Tính chiều dài

Các length hàm tính toán độ dài của một chuỗi.

Giải nén chuỗi con

Các subseq hàm trả về một chuỗi con (vì một chuỗi cũng là một chuỗi) bắt đầu từ một chỉ mục cụ thể và tiếp tục đến một chỉ mục kết thúc cụ thể hoặc cuối chuỗi.

Truy cập một ký tự trong một chuỗi

Các char hàm cho phép truy cập các ký tự riêng lẻ của một chuỗi.

Example

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

Khi bạn thực thi mã, nó trả về kết quả sau:

11
World
#\W

Sắp xếp và Hợp nhất các chuỗi

Các sorthàm cho phép sắp xếp một chuỗi. Nó nhận một chuỗi (vectơ hoặc chuỗi) và một vị từ hai đối số và trả về một phiên bản được sắp xếp của chuỗi.

Các merge hàm nhận hai chuỗi và một vị từ và trả về một chuỗi được tạo ra bằng cách hợp nhất hai chuỗi, theo vị từ.

Example

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

Khi bạn thực thi mã, nó trả về kết quả sau:

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

Đảo ngược một chuỗi

Các reverse hàm đảo ngược một chuỗi.

Ví dụ: Tạo tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

Khi bạn thực thi mã, nó trả về kết quả sau:

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

Nối các chuỗi

Hàm nối kết nối hai chuỗi. Đây là hàm trình tự chung và bạn phải cung cấp kiểu kết quả làm đối số đầu tiên.

Ví dụ: Tạo tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

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

Khi bạn thực thi mã, nó trả về kết quả sau:

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