LISP - Cuerdas

Las cadenas en Common Lisp son vectores, es decir, una matriz unidimensional de caracteres.

Los literales de cadena se incluyen entre comillas dobles. Cualquier carácter admitido por el conjunto de caracteres se puede encerrar entre comillas dobles para formar una cadena, excepto el carácter de comillas dobles (") y el carácter de escape (\). Sin embargo, puede incluirlos escapándolos con una barra invertida (\).

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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

Funciones de comparación de cadenas

Las funciones y operadores de comparación numérica, como <y> no funcionan en cadenas. Common LISP proporciona otros dos conjuntos de funciones para comparar cadenas en su código. Un conjunto distingue entre mayúsculas y minúsculas y el otro no distingue entre mayúsculas y minúsculas.

La siguiente tabla proporciona las funciones:

Funciones sensibles a mayúsculas y minúsculas Funciones que no distinguen entre mayúsculas y minúsculas Descripción
cadena = cadena-igual Comprueba si los valores de los operandos son todos iguales o no, si es así, la condición se convierte en verdadera.
cadena / = cadena-no-igual Comprueba si los valores de los operandos son todos diferentes o no, si los valores no son iguales, la condición se convierte en verdadera.
cadena < string-lessp Comprueba si los valores de los operandos disminuyen monótonamente.
cadena> cadena-mayorp Comprueba si los valores de los operandos aumentan monótonamente.
cadena <= cadena-no-mayorp Comprueba si el valor de cualquier operando izquierdo es mayor o igual que el valor del siguiente operando derecho; si es así, la condición se convierte en verdadera.
cadena> = cadena-no-menosp Comprueba si el valor de cualquier operando de la izquierda es menor o igual que el valor de su operando de la derecha, si es así, la condición se convierte en verdadera.

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

Funciones de control de casos

La siguiente tabla describe las funciones de control de casos:

No Señor. Función descriptiva
1

string-upcase

Convierte la cadena a mayúsculas

2

string-downcase

Convierte la cadena a minúsculas

3

string-capitalize

Capitaliza cada palabra en la cadena

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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

Recortar cuerdas

La siguiente tabla describe las funciones de recorte de cuerdas:

No Señor. Función descriptiva
1

string-trim

Toma una cadena de caracteres como primer argumento y una cadena como segundo argumento y devuelve una subcadena donde todos los caracteres que están en el primer argumento se eliminan de la cadena de argumentos.

2

String-left-trim

Toma una cadena de caracteres como primer argumento y una cadena como segundo argumento y devuelve una subcadena donde todos los caracteres que están en el primer argumento se eliminan del principio de la cadena de argumentos.

3

String-right-trim

Toma un carácter de cadena como primer argumento y una cadena como segundo argumento y devuelve una subcadena donde todos los caracteres que están en el primer argumento se eliminan del final de la cadena de argumentos.

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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

Otras funciones de cadena

Las cadenas en LISP son matrices y, por lo tanto, también secuencias. Cubriremos estos tipos de datos en los próximos tutoriales. Todas las funciones que son aplicables a matrices y secuencias también se aplican a cadenas. Sin embargo, demostraremos algunas funciones de uso común usando varios ejemplos.

Calcular la longitud

los length La función calcula la longitud de una cadena.

Extrayendo subcadena

los subseq La función devuelve una subcadena (ya que una cadena también es una secuencia) que comienza en un índice particular y continúa hasta un índice final particular o el final de la cadena.

Acceder a un personaje en una cadena

los char La función permite acceder a caracteres individuales de una cadena.

Example

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

11
World
#\W

Clasificación y fusión de cadenas

los sortLa función permite ordenar una cadena. Toma una secuencia (vector o cadena) y un predicado de dos argumentos y devuelve una versión ordenada de la secuencia.

los merge La función toma dos secuencias y un predicado y devuelve una secuencia producida al fusionar las dos secuencias, de acuerdo con el predicado.

Example

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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

Inversión de una cuerda

los reverse función invierte una cadena.

Por ejemplo, cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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

Concatenación de cadenas

La función concatenar concatena dos cadenas. Esta es una función de secuencia genérica y debe proporcionar el tipo de resultado como primer argumento.

Por ejemplo, cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

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

Cuando ejecuta el código, devuelve el siguiente resultado:

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