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