Parcours
/
Common Lisp
Common Lisp
/
Exercices
/
Étude de caractères
Étude de caractères

Étude de caractères

Exercice d'apprentissage

Introduction

Les caractères

Common Lisp possède des caractères, comme les autres langages de programmation. Les caractères sont des objets qui représentent un élément dans une portion de texte (par exemple une string ou un flux de texte).

Les caractères peuvent être convertis en nombres entiers, et inversement. (Mais ce ne sont pas des nombres entiers : il s'agit d'un type à part.)

Un caractère est représenté par #\ suivi de son nom. Le « nom » des caractères courants, comme « A », « b », « 9 » ou « ! », est tout simplement le caractère lui-même : donc #\A, #\b, #\9 et #\!. Certains caractères non graphiques, comme l'espace ou le passage à la ligne, portent des noms tels que #\Space et #\Newline.

La norme exige seulement qu'une implémentation dispose de 96 caractères (les lettres latines majuscules et minuscules (A-Za-z), les chiffres (0-9), l'espace (#\Space), le passage à la ligne (#\Newline) et la ponctuation (par exemple !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~)). Cependant, la plupart des implémentations en proposent davantage, y compris celles qui fournissent tous les caractères Unicode.

Compare des caractères

On peut comparer des caractères pour tester leur égalité avec char= ou char-equal (ce dernier ignorant la casse).

On peut ordonner des caractères avec des fonctions telles que char<, char>, char<=, char>= et leurs versions insensibles à la casse, char-lessp et char-greaterp.

Les types de caractères

Les caractères peuvent être classés en différents types : graphiques, alphabétiques, alphanumériques, chiffres, majuscules ou minuscules. Un caractère peut relever de plusieurs types à la fois, comme un caractère alphabétique majuscule. Il existe un prédicat pour chacun de ces types : graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p et lower-case-p.

Modifie la casse des caractères

Certains caractères peuvent être en majuscule ou en minuscule et être convertis de l'un à l'autre avec char-upcase et char-downcase.

Instructions

Lewis, un jeune Alien Lisp, a besoin d'avancer sur son projet d'alphabets humains et te demande si tu peux l'aider à programmer quelques fonctions dont il aura besoin.

1. Compare des caractères

Lewis aura besoin d'une fonction pour comparer deux caractères et déterminer si le premier est supérieur, inférieur ou égal au second. Écris une fonction compare-chars qui prend deux caractères et renvoie :greater-than, :less-than ou :equal-to selon le cas. La fonction doit comparer en tenant compte de la casse.

2. Détermine la « taille » du caractère

Lewis doit savoir si un caractère est « grand » (un caractère majuscule) ou « petit » (un caractère minuscule), ou bien « sans taille » s'il n'est ni l'un ni l'autre. Écris une fonction size-of-char qui renvoie :big, :small ou :no-size selon la « taille » du caractère :

3. Change la « taille » du caractère

Lewis devra peut-être transformer un grand caractère en petit, ou un petit en grand. Écris une fonction change-size-of-char qui prend deux paramètres : un caractère et une taille souhaitée (:big ou :small). Elle doit renvoyer le caractère correspondant, dans la taille correcte.

4. Détermine le « type » d'un caractère

Lewis n'aura pas seulement besoin de connaître la « taille » d'un caractère, mais aussi son « type ». Écris une fonction type-of-char qui renvoie :alpha si le caractère est un caractère alphabétique, :numeric s'il est numérique, :space s'il s'agit d'un espace, :newline s'il s'agit d'un caractère de nouvelle ligne et :unknown sinon

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Common Lisp Exercism

Prêt à commencer Étude de caractères ?

Inscris-toi sur Exercism pour apprendre et maîtriser Common Lisp avec 27 concepts92 exercices, et un vrai mentorat humain, le tout gratuitement.