LISP - Chaînes

Les chaînes en Common Lisp sont des vecteurs, c'est-à-dire un tableau unidimensionnel de caractères.

Les chaînes littérales sont placées entre guillemets. Tout caractère pris en charge par le jeu de caractères peut être placé entre guillemets pour créer une chaîne, à l'exception du caractère guillemet double (") et du caractère d'échappement (\). Cependant, vous pouvez les inclure en les échappant par une barre oblique inverse (\).

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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

Fonctions de comparaison de chaînes

Les fonctions et opérateurs de comparaison numérique, tels que, <et> ne fonctionnent pas sur les chaînes. Common LISP fournit deux autres ensembles de fonctions pour comparer les chaînes de votre code. Un ensemble est sensible à la casse et l'autre non sensible à la casse.

Le tableau suivant présente les fonctions -

Fonctions sensibles à la casse Fonctions insensibles à la casse La description
chaîne = chaîne égale Vérifie si les valeurs des opérandes sont toutes égales ou non, si oui, la condition devient vraie.
chaîne / = chaîne non égale Vérifie si les valeurs des opérandes sont toutes différentes ou non, si les valeurs ne sont pas égales, la condition devient vraie.
chaîne < string-lessp Vérifie si les valeurs des opérandes décroissent de manière monotone.
chaîne> string-Greaterp Vérifie si les valeurs des opérandes augmentent de manière monotone.
chaîne <= string-not-greaterp Vérifie si la valeur d'un opérande gauche est supérieure ou égale à la valeur de l'opérande droit suivant, si oui, la condition devient vraie.
chaîne> = string-not-lessp Vérifie si la valeur d'un opérande gauche est inférieure ou égale à la valeur de son opérande droit, si oui, la condition devient vraie.

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

Fonctions de contrôle de cas

Le tableau suivant décrit les fonctions de contrôle de cas -

N ° Sr. Description de la fonction
1

string-upcase

Convertit la chaîne en majuscules

2

string-downcase

Convertit la chaîne en minuscules

3

string-capitalize

Met en majuscule chaque mot de la chaîne

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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

Couper les chaînes

Le tableau suivant décrit les fonctions de rognage de chaîne -

N ° Sr. Description de la fonction
1

string-trim

Il prend une chaîne de caractère (s) comme premier argument et une chaîne comme deuxième argument et retourne une sous-chaîne dans laquelle tous les caractères qui sont dans le premier argument sont supprimés de la chaîne d'argument.

2

String-left-trim

Il prend une chaîne de caractère (s) comme premier argument et une chaîne comme deuxième argument et retourne une sous-chaîne où tous les caractères qui sont dans le premier argument sont supprimés du début de la chaîne d'argument.

3

String-right-trim

Il prend un ou plusieurs caractères de chaîne comme premier argument et une chaîne comme deuxième argument et renvoie une sous-chaîne dans laquelle tous les caractères du premier argument sont supprimés de la fin de la chaîne d'argument.

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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

Autres fonctions de chaîne

Les chaînes dans LISP sont des tableaux et donc aussi des séquences. Nous couvrirons ces types de données dans les prochains tutoriels. Toutes les fonctions applicables aux tableaux et aux séquences s'appliquent également aux chaînes. Cependant, nous allons démontrer certaines fonctions couramment utilisées à l'aide de divers exemples.

Calcul de la longueur

le length La fonction calcule la longueur d'une chaîne.

Extraction de sous-chaîne

le subseq La fonction retourne une sous-chaîne (car une chaîne est également une séquence) commençant à un index particulier et continuant jusqu'à un index de fin particulier ou à la fin de la chaîne.

Accéder à un caractère dans une chaîne

le char La fonction permet d'accéder aux caractères individuels d'une chaîne.

Example

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

11
World
#\W

Tri et fusion de chaînes

le sortLa fonction permet de trier une chaîne. Il prend une séquence (vecteur ou chaîne) et un prédicat à deux arguments et renvoie une version triée de la séquence.

le merge function prend deux séquences et un prédicat et retourne une séquence produite par la fusion des deux séquences, selon le prédicat.

Example

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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

Inverser une chaîne

le reverse function inverse une chaîne.

Par exemple, créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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

Concaténation de chaînes

La fonction concaténer concatène deux chaînes. Il s'agit d'une fonction de séquence générique et vous devez fournir le type de résultat comme premier argument.

Par exemple, créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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