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