Cadenas de texto


Las cadenas de texto se expresan encerrando una secuencia de caracteres alfanuméricos entre comillas dobles. Para más información sobre cadenas, ver The Common Lisp Cookbook.

concatenate

; concatena cadenas devolviendo el nuevo texto
(concatenate 'string "Hola" ", " "Mundo")
"Hola, Mundo"
; concatena cadenas devolviendo lista de caracteres
(concatenate 'list "Hola" ", " "Mundo")
(#\H #\o #\l #\a #\, #\  #\M #\u #\n #\d #\o)

format

La función format tiene una sintaxis que permite hacer más cosas de las que se indican aquí.

; devuelve cadena insertando el resultado de una evaluación
(format nil "7 + 5 = ~a" (+ 7 5))
"7 + 5 = 12"
; devuelve cadena insertando los resultados de varias evaluaciones,
; a cada evaluación le corresponde una directiva ~a
(format nil "7 + 5 = ~a; 7 x 5 = ~a; 7 : 5 = ~a"
   (+ 7 5) (* 7 5) (/ 7 5))
"7 + 5 = 12; 7 x 5 = 35; 7 : 5 = 7/5"
; entero precedido de signo
(format nil "valor entero = ~@d" 57)
"valor entero = +57"
; entero con diez posiciones
(format nil "valor entero = ~10d" 57)
"valor entero =         57"
; entero añadiendo caracteres en los huecos
(format nil "valor entero = ~10,'.d" 57)
"valor entero = ........57"
; separa en grupos de tres cifras
(format nil "~,,'.,3:d" 78575693214)
"78.575.693.214"
; imprime en hexadecimal
(format nil "~x" 214)
"D6"
; imprime en base octal
(format nil "~o" 214)
"326"
; imprime en base binaria
(format nil "~b" 214)
"11010110"
; imprime en formato decimal
(format nil "~f" 0.00000369)
"0.00000369"
; imprime en notación científica
(format nil "~e" 0.00000369)
"3.6900002e-6"
; imprime en notación científica precedido de signo
(format nil "~@e" 0.00000369)
"+3.6900002e-6"
; formato monetario por defecto, con dos decimales
(format nil "~$€" 0.154769)
"0.15€"
; formato monetario con tres decimales
; y cinco posiciones enteras
(format nil "$~3,5$" 532.154769)
"$00532.155"
; en inglés
(format nil "~r" 5398)
"five thousand three hundred ninety-eight"
; en números romanos
(format nil "~@r" 398)
"CCCXCVIII"
; en números romanos con minúsculas
(format nil "~(~@r~)" 398)
"cccxcviii"

length

; número de caracteres de la cadena de texto
(length "Hola Mundo")
10

make-string

(make-string 7 :initial-element #\€)
"€€€€€€€"

position, position-if

(position #\a "Hola a todos")
3
(position #\space "Hola a todos")
4
; busca espacio más allá de la posición 7
(position #\space "Hola a todos" :start 7)
NIL
(position #\a "Hola a todos" :from-end t)
5
; busca posición del carácter con código ASCII 108 (l)
(position-if #'(lambda (z) (= (char-int z) 108)) "Hola a todos")
2

remove, remove-if

(remove #\a "Hola a todos")
"Hol  todos"
; elimina caracteres con código ASCII 108 (l)
(remove-if #'(lambda (z) (= (char-int z) 108)) "Hola a todos")
"Hoa a todos"

replace

; remplaza los caracteres de la primera cadena entre las posiciones 4 y 7
; por los caracteres de la segunda cadena posicionados entre 4 y 8.
; Si el primer argumento es una variable, ésta se modifica con el resultado.
(replace "abcdefghij" "0123456789" :start1 4 :end1 7 :start2 4 :end2 8)
"abcd456hij"

search

(search " a " "Hola a todos")
4

subseq

; subcadena a partir de la posición 4
(subseq "Hola a todos" 4)
" a todos"
; subcadena entre posiciones 3 y 8
(subseq "Hola a todos" 3 8)
"a a t"

substitute, substitute-if

; sustituye espacios por guiones
(substitute #\- #\SPACE "Hola a todos")
"Hola-a-todos"
; como anterior, pero con función lambda
(substitute-if #\- #'(lambda (z) (= (char-int z) 32)) "Hola a todos")
"Hola-a-todos"

string

; si argumento es cadena, la devuelve tal cual
(string "Hola a todos")
"Hola a todos"
; transforma símbolo en cadena
(string 'x)
"X"
; transforma carácter en cadena
(string #\h)
"h"
; transforma secuencia de escape en cadena
(string #\\)
"\\"

string=, string-equal

; compara dos cadenas de caracteres
(string= "Hola a todos" "Hola a todos")
T
; compara dos cadenas de caracteres
(string= "Hola a todos" "Hola A todos")
NIL
; compara ignorando capitalización
(string-equal "Hola a todos" "Hola A todos")
T

string/=, string-not-equal

; compara dos cadenas de caracteres
(string/= "Hola a todos" "Hola a todos")
NIL
; compara dos cadenas de caracteres.
; Devuelve posición de la primera diferencia
(string/= "Hola a todos" "Hola A todos")
5
; ignora capitalización
(string-not-equal "Hola a todos" "Hola a Todo todo el muno")
11

string<, string-lessp

; orden lexicográfico.
; Devuelve posición de la primera diferencia
(string< "aaaa" "aaab")
3
; orden lexicográfico.
; Devuelve posición de la primera diferencia
(string< "aaaa" "aaaa")
NIL
; ignora capitalización
(string-lessp "aAaa" "aaAb")
3
; ignora capitalización
(string-lessp "012AAAA789" "01aaab6"
   :start1 3 :end1 7
   :start2 2 :end2 6)
6

string<=, string-not-greaterp

; orden lexicográfico.
; Devuelve posición de la primera diferencia
(string<= "aaaa" "aaab")
3
; orden lexicográfico.
(string<= "aaaa" "aaaa")
4
; ignora capitalización
(string-lessp "aAaa" "aaAb")
3

string>, string-greaterp

; orden lexicográfico.
; Devuelve posición de la primera diferencia
(string> "aaaa" "aaab")
NIL
; orden lexicográfico.
; Ignora capitalización
(string-greaterp "aaab" "aaaA")
3

string>=, string-not-lessp

; orden lexicográfico.
(string>= "aaaa" "aaaa")
4
; orden lexicográfico.
; Ignora capitalización
(string-not-lessp "aaaa" "aaaB")
NIL

string-capitalize, string-downcase, string-upcase

; capitaliza primera letra de cada palabra
(string-capitalize "hola mundo")
"Hola Mundo"
; todo a minúsculas
(string-downcase "HolA MundO")
"hola mundo"
; todo a mayúsculas
(string-upcase "HolA MundO")
"HOLA MUNDO"
; indica inicio de mayúsculas
(string-upcase "HolA MundO" :start 5)
"HolA MUNDO"
; indica inicio y final de mayúsculas
(string-upcase "HolA MundO" :start 5 :end 8)
"HolA MUNdO"

string-trim, string-left-trim, string-right-trim

; elimina caractres de la primera cadena de los extremos de la segunda
(string-trim "#!}%~]+¬ħ*" "#!}*Hola mundo%~]+¬ħ")
"Hola mundo"
; elimina caractres de la izquierda
(string-left-trim "#!}%~]+¬ħ*" "#!}*Hola mundo%~]+¬ħ")
"Hola mundo%~]+¬ħ"
; elimina caractres de la derecha
(string-right-trim "#!}%~]+¬ħ*" "#!}*Hola mundo%~]+¬ħ")
"#!}*Hola mundo"

stringp

; ¿es cadena de caracteres?
(stringp "Hola mundo")
T
(stringp 3.5)
NIL
(stringp '(1 2 3))
NIL
(stringp 'var)
NIL

© 2016, TecnoStats