LISP - Strings

Strings em Common Lisp são vetores, isto é, array unidimensional de caracteres.

Literais de string são colocados entre aspas duplas. Qualquer caractere compatível com o conjunto de caracteres pode ser colocado entre aspas duplas para formar uma string, exceto o caractere de aspas duplas (") e o caractere de escape (\). No entanto, você pode incluí-los deixando-os com uma barra invertida (\).

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

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

Quando você executa o código, ele retorna o seguinte resultado -

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

Funções de comparação de strings

Operadores e funções de comparação numérica, como <e> não funcionam em strings. LISP comum fornece outros dois conjuntos de funções para comparar strings em seu código. Um conjunto diferencia maiúsculas de minúsculas e o outro não diferencia maiúsculas de minúsculas.

A tabela a seguir fornece as funções -

Funções que diferenciam maiúsculas de minúsculas Funções que não diferenciam maiúsculas de minúsculas Descrição
string = string-igual Verifica se os valores dos operandos são todos iguais ou não, se sim então a condição torna-se verdadeira.
string / = string-not-equal Verifica se os valores dos operandos são todos diferentes ou não, se os valores não são iguais a condição torna-se verdadeira.
string < string-lessp Verifica se os valores dos operandos estão diminuindo monotonicamente.
string> string-maior Verifica se os valores dos operandos estão aumentando monotonicamente.
string <= string-not-higherp Verifica se o valor de algum operando à esquerda é maior ou igual ao valor do próximo operando à direita. Se sim, a condição se torna verdadeira.
string> = string-not-lessp Verifica se o valor de algum operando esquerdo é menor ou igual ao valor de seu operando direito; em caso positivo, a condição se torna verdadeira.

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

Funções de controle de caso

A tabela a seguir descreve as funções de controle de caso -

Sr. Não. Descrição da função
1

string-upcase

Converte a string em maiúsculas

2

string-downcase

Converte a string em minúsculas

3

string-capitalize

Capitaliza cada palavra na string

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

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

Corte de cordas

A tabela a seguir descreve as funções de corte de string -

Sr. Não. Descrição da função
1

string-trim

Ele pega uma string de caractere (s) como primeiro argumento e uma string como o segundo argumento e retorna uma substring onde todos os caracteres que estão no primeiro argumento são removidos da string de argumento.

2

String-left-trim

Ele pega uma string de caractere (s) como primeiro argumento e uma string como o segundo argumento e retorna uma substring onde todos os caracteres que estão no primeiro argumento são removidos do início da string do argumento.

3

String-right-trim

Ele pega um caractere (s) de string como primeiro argumento e uma string como o segundo argumento e retorna uma substring onde todos os caracteres que estão no primeiro argumento são removidos do final da string de argumento.

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

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

Outras funções de string

Strings em LISP são arrays e, portanto, também sequências. Abordaremos esses tipos de dados nos próximos tutoriais. Todas as funções aplicáveis ​​a arrays e sequências também se aplicam a strings. No entanto, demonstraremos algumas funções comumente usadas usando vários exemplos.

Calculando Comprimento

o length função calcula o comprimento de uma string.

Extraindo Sub-string

o subseq função retorna uma substring (como string também é uma sequência) começando em um índice particular e continuando para um índice final particular ou o final da string.

Acessando um caractere em uma string

o char função permite acessar caracteres individuais de uma string.

Example

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

11
World
#\W

Classificando e Mesclando Strings

o sortfunção permite classificar uma string. Ele pega uma sequência (vetor ou string) e um predicado de dois argumentos e retorna uma versão classificada da sequência.

o merge A função recebe duas sequências e um predicado e retorna uma sequência produzida pela fusão das duas sequências, de acordo com o predicado.

Example

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

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

Invertendo uma corda

o reverse função inverte uma string.

Por exemplo, crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

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

Strings de concatenação

A função concatenate concatena duas strings. Esta é uma função de sequência genérica e você deve fornecer o tipo de resultado como o primeiro argumento.

Por exemplo, crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

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

Quando você executa o código, ele retorna o seguinte resultado -

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