Une chaîne de caractères est une donnée littérale composée de caractères et délimitées par une paire de guillemets (exemple: “toto”) ou de «back quotes», autrement-dit, des accents graves (exemple: `toto`).
Dans le cas particulier où on utilise des «back quotes», la chaîne de caractères peut être introduite sur plusieurs lignes. Les retours à la ligne qui figurent dans le code source font également partie de la chaîne de caractères.
(display "***") (display.. ` Aujourd'hui, je suis allé à l'école. J'y ai rencontré de nombreux amis. Nous avons étudié les mathématiques. `) (display "***")
⇒
*** Aujourd'hui, je suis allé à l'école. J'y ai rencontré de nombreux amis. Nous avons étudié les mathématiques. ***
On peut les considérer comme des tableaux immuables de caractères.
Dans le cas où une chaîne délimitée par des guillemets devrait contenir des guillemets, il est possible de les insérer sans fermer prématurément l'expression en les précédant du caractère antislash (la barre oblique inverse ou antislash “\” ).
Ainsi l'expression “Il dit: \“C'est l'été!\”…“ est correcte.
Le caractère antislash “\” permet en outre d'insérer des caractères spéciaux dans les chaînes de caractères. Les caractères spéciaux sont difficiles, voir même impossibles, à introduire de façon littérale dans une expression. Il peut s'agir du caractère de retour à la ligne ou d'un caractère figurant dans un autre alphabet (par exemple, l'alphabet hébreux ou grec).
Caractères spéciaux | Affichage et équivalence |
\\ |
Insertion d'un caractère antislash « \ » |
\' |
Insertion d'un caractère apostrophe « ' » |
\" |
Insertion d'un caractère guillemet « '' » |
\n |
Insertion du caractère NEW-LINE, c'est-à-dire de passage à la ligne suivante (ASCII: 10). |
\r |
Insertion du caractère de retour chariot (CARRIAGE-RETURN) sans nécessairement passer à la ligne suivante (ASCII: 13). |
\t |
Insertion d'un caractère de tabulation (ASCII: 9). |
\a |
Insertion d'un caractère BELL ou alarme de console (ASCII: 7). |
\f |
Insertion d'un caractère FORM-FEED ou de passage à la page suivante dans une console (ASCII: 12). |
\e |
Insertion d'un caractère ESC ou d'échappement dans le mode console (ASCII: 27). |
\xHH |
Insertion d'un caractère ASCII dont le code hexadécimal est indiqué par HH. Exemples: \x0A insère un caractère de passage à la ligne et \x41 insère la lettre 'A'. |
\uHHHH |
Insertion d'un caractère UNICODE dont le code hexadécimal est indiqué par HHHH. L'utilisation des caractères UNICODE permet d'accéder aux caractères appartenant à d'autres alphabets. Par exemple, \u2211 correspond à la lettre grecque sigma utilisée en mathématique pour symboliser la somme et s'affiche sous la forme '∑'. |
Il est cependant à noter que si vous souhaitez insérer un caractère littéral antislash dans une chaîne de caractères, vous devrez saisir ce caractère deux fois de suite (exemple: “C:\\WINDOWS\\“ sera interpréter comme “C:\WINDOWS\”).
Il peut arriver également qu'une chaîne de caractères délimitée par des guillemets soit assez longue.
Dans ce cas, on peut aussi utiliser le caractère antislash seul à la fin de la ligne pour ignorer le caractère de saut de ligne qui suit. La chaîne de caractères continue alors au début de la ligne suivante.
De cette façon, l'interpréteur ne renvoie pas une erreur parce que la chaîne de caractères n'est pas fermée par un caractère de délimitation avant la fin de la ligne courante.
Ces expressions littérales de chaînes de caractères sont interprétées de façon équivalente: |
"Dimanche, nous irons \ |
"Dimanche, nous irons au cinéma." |
Il ne faut pas confondre cet usage avec celui des «back quotes». Les «back quotes» permettent justement de prendre en compte tous les caractères tels qu'ils sont indiqués dans le code source sans être filtrés. Bien sûr, si on doit ajouter un caractère «back quote» dans une chaîne de caractères, il convient de le faire précéder par un anti-slash (sur le même principe que pour ajouter un caractère guillemet dans une chaîne délimitée par des guillemets).
Comme les chaînes de caractères sont des littéraux, il n'est pas nécessaire d'utiliser un constructeur pour créer une nouvelle chaîne de caractères.
Toutefois, des constructeurs par conversion existent. Ils permettent de convertir un certain type de donnée en une chaîne de caractères.
Le principal constructeur est l'opérateur string.
(string 10)
⇒
"10"
Mais il en existe d'autres pour par exemple convertir les nombres entiers en chaînes de caractères représentant ces nombres en hexadécimal, en binaire ou en octal. Il s'agit des opérateurs hex-string, bin-string et oct-string.
On peut aussi convertir une chaîne de caractères en une autre chaîne de caractères. Par exemple, les opérateurs lower et upper retourne une nouvelle chaîne de caractères où les caractères ont été transformés en minuscules ou en majuscules.
L'opérateur trim retourne une nouvelle chaîne de caractères où tous les caractères d'espacement (espaces, retours à la ligne et tabulations) ont été supprimés du début et de la fin de la chaîne de caractères originale.
Pour ajouter des caractères supplémentaires à la fin d'une chaîne de caractères, il suffit d'utiliser l'opérateur +.
Enfin, les chaînes de caractères supportent également les principaux opérateurs de collections tels que car, cdr, head, tail, slice et concat.
Comme c'est le cas pour les autres collections, on peut lire les caractères d'une chaîne de caractères à l'aide de leur position. Pour cela, il suffit d'appeler la chaîne de caractère en fournissant l'indice du caractère à lire.
(display ("abcdef" 2))
⇒
c
L'indice du premier caractère d'une chaîne de caractères est 0 et le dernier caractère d'une chaîne de n caractères à l'indice n-1.
Rappelons toutefois, qu'une chaîne de caractères est immuable. On ne peut donc pas modifier sur place un caractère dans une chaîne.